在case状态中,我使用子字符串函数返回'B0‘- 'B9’之间的所有数字。
WHEN SUBSTRING (postcode, 1, 2) like 'B[0-9]'但是我不想返回这个列表中的数字'B5‘。我能让它像这样工作
WHEN SUBSTRING (postcode, 1, 2) like 'B[0-4]'
WHEN SUBSTRING (postcode, 1, 2) like 'B[6-9]'但是有什么方法可以像下面这样将其添加到一行中吗?
WHEN SUBSTRING (postcode, 1, 2) like 'B[0-9]' and not like 'B5'编辑:
如果您在其中处理0-100之间的数字,那么您将如何做到这一点,这样sql就会像
WHEN SUBSTRING (postcode, 1, 3) like 'B[0-9][0-9]'但你不想包括16和17?
发布于 2013-01-31 14:21:23
WHEN SUBSTRING (postcode, 1, 2) like 'B[012346789]' -- No "5"喜欢模式非常棒。如果你愿意的话。
要将这些值传递到数字的十位或更多位置,您可能需要考虑将这些值放入一个表中,您可以将这些值用于join、exists或in。
或者,由于我们将该列的数字部分视为数字而不是字符串,这是一个迹象,表明它们可能更好地存储为两列:一列用于alpha,一列用于数字。
除非对模式进行任何更改,否则可以临时删除alpha字符,以便将它们与一系列数字进行比较,例如:
where cast(replace(postcode, 'B', '') as int) between 0 and 15
or cast(replace(postcode, 'B', '') as int) between 18 and 100
where cast(right(postcode, len(postcode) - 1) as int) between 0 and 15
or cast(right(postcode, len(postcode) - 1) as int) between 18 and 100这些只是几种可能性。你最好知道如何按摩你的数据。
发布于 2013-01-31 14:21:52
您可以尝试有两个范围,从其中删除5:
WHEN SUBSTRING (postcode, 1, 2) like 'B[0-46-9]'发布于 2013-01-31 14:25:13
使用^来表示不..。见喜欢..。
但为什么不试试
`WHEN SUBSTRING (postcode, 1, 2) like 'B[0-4]' Or
SUBSTRING (postcode, 1, 2) like 'B[6-9]'`或者您可以将范围放在相同的括号中。
`WHEN SUBSTRING (postcode, 1, 2) like 'B[0-46-9]'https://stackoverflow.com/questions/14627951
复制相似问题