仅选择包含数字的字符串 SQL Server

9

我需要在我的表格中只选择字符串,但是这个表格中有数字和字符串混合在一起。

例如:

ID Name
1  Jacke11
2  Andre
3  Rodrigo11
4  55555

我的选择需要仅返回ID:1、2、3。

谢谢


哎,id 真的是一个单独的列,而 name 是另一个单独的列吗? - Joachim Isaksson
如果您的选择只需要返回1、2、3,则只需从表中获取整数。这些整数之间用空格隔开。 - Gustavo F
2个回答

18
SELECT ID
    FROM YourTable
    WHERE ISNUMERIC(Name + '.0e0') = 0

4
我想我知道为什么,但你可以解释一下为什么要加上'+.0e0'这段代码吗?我认为它不是很直观,需要解释。 - Yuck
3
由于使用ISNUMERIC时,可能会出现意外匹配,因为它会将浮点型(以及货币和某些符号)视为非整型数据类型而评估为“TRUE”。例如,12e10会通过ISNUMERIC检查返回TRUE。通过添加.0e0,你可以强制其仅检查整数值。 - JNK
2
@Yuck:如果没有它,ISNUMERIC将会对'+'和'$'等字符返回1。 - Joe Stefanelli
使用ISNUMERIC会导致更多的麻烦。目前最正确和高效的答案是@JNK answer - Henryk Budzinski

7

除了Joe的非常好的ISNUMERIC解决方案,您还可以使用PATINDEX来确保您有一个字母字符:

SELECT ID
    FROM YourTable
    WHERE PATINDEX('%[a-z]%', name) > 0

这可能会稍微快一些,因为一旦到达第一个字母字符,它就会停止搜索字符串。

为了避免异常,我会放置一个 COALESCE(name, '') 或类似的东西。 - Henryk Budzinski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接