刚才网友在SKYPE问Insus.NET一个问题,在MS SQL中,怎样找出一个字符串所有数字。
Insus.NET使用较简单与平常的方法,就是使用循环的方法,循环字符串中每一个字符,并插入至一个表变量中。然后再SELECT这个表变量,条件中使用了正则表达式来实现。请参考下面完整的SQL语句,还附加上注释。如遇上不明的, 请继续讨论。
DECLARE
@s
NVARCHAR(
100)
=
'
ADF63 2sadf8w 43r fd 8dj2
'
-- 宣告一个表变量
DECLARE @t TABLE ( [ s ] NVARCHAR( 2) NULL)
-- 宣告两个变量,一个是循环初始变量,另一个是存储字符长度变量
DECLARE @I INT = 1, @J INT = LEN( @s)
-- 开始循环
WHILE @I <= @J
BEGIN
-- 截取每一个字符并存入表变量中
INSERT INTO @t SELECT SUBSTRING( @s, @I, 1)
-- 每循环一个字符,循环初始变量加1
SET @I = @I + 1
END
-- 最后是SELECT表变量,条件使用正则
SELECT [ s ] FROM @t WHERE [ s ] LIKE ' %[0-9]% '
-- 宣告一个表变量
DECLARE @t TABLE ( [ s ] NVARCHAR( 2) NULL)
-- 宣告两个变量,一个是循环初始变量,另一个是存储字符长度变量
DECLARE @I INT = 1, @J INT = LEN( @s)
-- 开始循环
WHILE @I <= @J
BEGIN
-- 截取每一个字符并存入表变量中
INSERT INTO @t SELECT SUBSTRING( @s, @I, 1)
-- 每循环一个字符,循环初始变量加1
SET @I = @I + 1
END
-- 最后是SELECT表变量,条件使用正则
SELECT [ s ] FROM @t WHERE [ s ] LIKE ' %[0-9]% '