首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL:子字符串,用于包含除5以外的0-9之间的所有数字。

TSQL:子字符串,用于包含除5以外的0-9之间的所有数字。
EN

Stack Overflow用户
提问于 2013-01-31 14:19:48
回答 4查看 1.7K关注 0票数 2

在case状态中,我使用子字符串函数返回'B0‘- 'B9’之间的所有数字。

代码语言:javascript
复制
WHEN SUBSTRING (postcode, 1, 2) like 'B[0-9]'

但是我不想返回这个列表中的数字'B5‘。我能让它像这样工作

代码语言:javascript
复制
WHEN SUBSTRING (postcode, 1, 2) like 'B[0-4]'
WHEN SUBSTRING (postcode, 1, 2) like 'B[6-9]'

但是有什么方法可以像下面这样将其添加到一行中吗?

代码语言:javascript
复制
WHEN SUBSTRING (postcode, 1, 2) like 'B[0-9]' and not like 'B5'

编辑:

如果您在其中处理0-100之间的数字,那么您将如何做到这一点,这样sql就会像

代码语言:javascript
复制
WHEN SUBSTRING (postcode, 1, 3) like 'B[0-9][0-9]'

但你不想包括16和17?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-31 14:21:23

代码语言:javascript
复制
WHEN SUBSTRING (postcode, 1, 2) like 'B[012346789]' -- No "5"

喜欢模式非常棒。如果你愿意的话。

要将这些值传递到数字的十位或更多位置,您可能需要考虑将这些值放入一个表中,您可以将这些值用于joinexistsin

或者,由于我们将该列的数字部分视为数字而不是字符串,这是一个迹象,表明它们可能更好地存储为两列:一列用于alpha,一列用于数字。

除非对模式进行任何更改,否则可以临时删除alpha字符,以便将它们与一系列数字进行比较,例如:

代码语言:javascript
复制
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

这些只是几种可能性。你最好知道如何按摩你的数据。

票数 7
EN

Stack Overflow用户

发布于 2013-01-31 14:21:52

您可以尝试有两个范围,从其中删除5:

代码语言:javascript
复制
WHEN SUBSTRING (postcode, 1, 2) like 'B[0-46-9]'
票数 3
EN

Stack Overflow用户

发布于 2013-01-31 14:25:13

使用^来表示不..。见喜欢..。

但为什么不试试

代码语言:javascript
复制
`WHEN SUBSTRING (postcode, 1, 2) like 'B[0-4]' Or   
      SUBSTRING (postcode, 1, 2) like 'B[6-9]'`

或者您可以将范围放在相同的括号中。

代码语言:javascript
复制
`WHEN SUBSTRING (postcode, 1, 2) like 'B[0-46-9]'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14627951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档