sql-server-2012 - 下划线和 LEFT 函数
问题描述
我有一列的值如下所示:
17_数据...
18_数据...
1801151...数据
此列中的数据不是最干净的,因此我尝试使用 LEFT 函数来识别具有 2017 年后跟下划线的行LEFT(column, 3) = '17[_]'
这不会返回单个列。因此,为了排除故障,我将这个 WHERE 子句添加到 SELECT 语句中以查看返回的内容,我得到了值 175,其中实际的前三个字符是“17_”。
为什么会这样,我如何构造我的 WHERE 子句来获取这些行?
解决方案
当您尝试使用规则添加 'where' 时LEFT(column, 3) = '17[_]'
,它注定会失败。运算符 '=' 执行精确比较:两边必须相等。也就是说,它将查找前 3 个字符 (left,3) 等于 的行17[_]
,即 5 个字符,一个、七个、括号、下划线、括号。3 个字符的文本永远不会完全匹配 5 个字符。
你应该简单地写:
WHERE LEFT(column, 3) = '17_'
我想你已经有了从阅读 LIKE 模式中添加括号的想法。LIKE 运算符允许您查找包含在数据开始/结束/中间的字符串。
WHERE column LIKE 'mom%' - starts with mom
WHERE column LIKE '%dad' - ends with dad
等等。LIKE 支持 '%' 表示“然后是任意长度的文本”,还支持“_”表示“然后只有一个字符”。这就形成了一个问题:当你想说“以_mom开头”时,你不能写
WHERE column LIKE '_mom%'
因为它也会匹配 9mom、Bmom 等,因为它的_
意思是“任何单个字符”。这就是为什么在这种情况下,只有在 LIKE 中,您必须在括号中写下划线:
WHERE column LIKE '[_]mom%' - starts with _mom
知道了这一点,很明显你也可以用 LIKE 构建你的“以 17_ 开头”:
SELECT column1, column2, ..., columnN
FROM sometable
WHERE column LIKE '17[_]%'
推荐阅读
- docker - BUSYBOX 脚本错误
- json - JSON如何搜索键名称值并打印包含不区分大小写的字符串或字符串集的对象?
- python - 计算球状星团的 rms 半径
- python - 如何确定您没有文档的 REST API 所需的身份验证类型?
- java - Spring Boot批处理MultiResourceItemReader:如何使用@Value()从jar位置读取文件
- google-api - 检索每个地点的多张图片
- python - 将整数列表转换为位列表 Python
- python-3.x - 如何将存储在 Google Drive 中的本地模块导入 Google Collab?
- python - 是否可以从部分 URL 将文件上传到 S3?文件.aa、文件.ab、文件.ac
- node.js - 谷歌云 CPU 分析未显示有用数据