相关疑难解决方法(0)

在T-SQL中用一个空格替换重复的空格

我需要确保一个给定的字段在字符之间没有多个空格(我不关心所有空格,只关心空格).

所以

'single    spaces   only'
Run Code Online (Sandbox Code Playgroud)

需要变成

'single spaces only'
Run Code Online (Sandbox Code Playgroud)

以下不起作用

select replace('single    spaces   only','  ',' ')
Run Code Online (Sandbox Code Playgroud)

因为它会导致

'single  spaces  only'
Run Code Online (Sandbox Code Playgroud)

我更喜欢坚持使用原生T-SQL而不是基于CLR的解决方案.

思考?

t-sql sql-server

95
推荐指数
7
解决办法
10万
查看次数

从数字中删除非数字数据 + SQL

我正在尝试找到从 SQL 中的 varchar 中删除非数字数据的最佳方法,例如

'(082) 000-0000' to '0820000000' or
'+2782 000 0000' to '0820000000'
Run Code Online (Sandbox Code Playgroud)

困难在于我并不总是确定输入的数字格式是什么,如上所示,所以我希望基本上删除所有不是数字的内容。

更新:
根据你们所说,这是一个小尖峰完成:

declare @Num varchar(20)

set @Num = ' + (82) 468 6152 '

--strip nonnumrical data out of @num

print @Num

set @Num = replace(@Num, ' ', '')
set @Num = replace(@Num, '+', '')
set @Num = replace(@Num, '-', '')
set @Num = replace(@Num, '(', '')
set @Num = replace(@Num, ')', '')

print @Num
Run Code Online (Sandbox Code Playgroud)

但无法正确替换 [^0-9] 表达式。

sql t-sql sql-server numbers

3
推荐指数
1
解决办法
2万
查看次数

提取大写字母和数字

我正在尝试处理一个字符串,以便只采用大写字母和数字.试图使用PATINDEX,因为我想保持这种简洁 - 它将成为更大的查询的一部分.

有很多例子显示出类似的东西,但我似乎错过了一些东西.到目前为止我已经有了

DECLARE @string varchar(100)

SET @string = 'AbcDef12-Ghi'

WHILE PATINDEX('%[^A-Z0-9]%',@string) <> 0
    SET @string = STUFF(@string,PATINDEX('%[^A-Z0-9]%',@string),1,'')

SELECT @string
Run Code Online (Sandbox Code Playgroud)

根据例如这个问题,然而这似乎并没有做我需要的.

使用[^0-9]输出12,这是正确的.

[^A-Z]输出AbcDefGhi,即大写和小写.如果我使用[^A-Z]或者[^a-z]都返回所有字母都没关系.

我想我可能会遗漏一些简单的东西?我发现了一些建议,指整理并试图用逐份PATINDEX按照这个,但不能让它开始工作.

注意:我这样做是作为SQL Server数据库上的一次性查询来查找一些数据 - 这不会在其他任何地方重复使用,所以像性能,SQL注入(在这种情况下经常提到)等不是关心.

t-sql sql-server sql-server-2008-r2

1
推荐指数
1
解决办法
757
查看次数

标签 统计

sql-server ×3

t-sql ×3

numbers ×1

sql ×1

sql-server-2008-r2 ×1