Mis*_*aak 3 t-sql sql-server-2008-r2
我有一个char(15) NOT NULL
专栏。我需要查看它是否为空或包含全零。我显然可以做到= '000000000000000'
但是有没有办法使用LIKE
它而不是硬编码为 15?我不明白为什么[^0]
下面不匹配所有零。
CASE WHEN LTRIM(RTRIM(IL.ItemNumber)) = '' THEN 1 ELSE 0 END IsEmpty
CASE WHEN LTRIM(RTRIM(IL.ItemNumber)) <> '' AND LTRIM(RTRIM(IL.ItemNumber)) NOT LIKE '[^0]' THEN 1 ELSE 0 END IsZeros
Run Code Online (Sandbox Code Playgroud)
我基本上是在尝试验证该列。修剪适用于空,但也许有更简洁/灵活的方法来完成这两个验证?谢谢!
其实有REPLICATE()
功能:
WHERE <column> = REPLICATE('0',15)
Run Code Online (Sandbox Code Playgroud)
有趣的是,它实际上使用了 17 个字符,与'000000000000000'
字面量完全相同。
(再次阅读这个问题,我想你也不想要上面的内容,因为它有15
硬编码。)
LIKE
您的条件没有按预期工作,因为LIKE '[^0]'
只有当该列恰好有 1 个字符时才会为真。我认为您需要检查它是否只有 0:
WHERE <column> NOT LIKE '%[^0]%'
Run Code Online (Sandbox Code Playgroud)
要检查它是否只有 0 或只有空格,这样做 (for CHAR
and VARCHAR
columns) 并且您甚至不必修剪列:
WHERE <column> = ''
OR <column> NOT LIKE '%[^0]%'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9940 次 |
最近记录: |