我想做类似的事情
select * from X where string.IsNullOrWhiteSpace(a)
列a为NOT NULL
那么在T-SQL中,获取所有仅包含空格(多个空格或制表符的组合)的列a的行的等效方法是什么?
同时,我宁愿不使用clr函数。
我想做类似的事情
select * from X where string.IsNullOrWhiteSpace(a)
列a为NOT NULL
那么在T-SQL中,获取所有仅包含空格(多个空格或制表符的组合)的列a的行的等效方法是什么?
同时,我宁愿不使用clr函数。
你可以尝试这个:
select *
from yourtable
where ltrim(rtrim(yourcolumn)) = ''
这个想法是,如果裁剪值后得到一个空字符串,那么一开始你所拥有的仅仅是空格。
你也可以这样做:
select *
from yourtable
where yourcolumn like ' '
请注意,我已在SQL Server 2008 R2上测试了第二个查询,但根据@gunr2171在评论中所述,它在2014年版上不起作用。
最后,如果您有制表符、回车或换行符,则上述方法将无法正常工作。您可以先将这些值替换为空字符串,然后使用第一个查询,如下所示:
select *
from yourtable
where ltrim(rtrim(replace(replace(replace(yourcolumn,char(9),''),char(10),''),char(13),''))) = ''
char(9)
、char(10)
和char(13)
分别用于制表符、换行符和回车符。
declare @temp nvarchar(max) = ' '; if(@temp like ' ') print 'yes'
- gunr2171我曾经遇到过一个问题,需要找出并清除数据库字段中所有的空格,但我发现有四种可能的空格类型(参考ASCII代码表):
也许这个查询可以帮到你。
SELECT @COLUMN
FROM @TABLE
WHERE @COLUMN like '%'+CHAR(9)+'%' or @COLUMN like '%'+CHAR(10)+'%'
or @COLUMN like '%'+CHAR(11)+'%' or @COLUMN like '%'+CHAR(32)+'%'
根据shree.pat18的评论,这里是可能的答案...
select *
from yourtable
where ltrim(rtrim(yourcolumn)) = '' or yourcolumn is null
方法 string.IsNullOrWhiteSpace
检查了25 个不同的Unicode空格字符。在SQL Server2017+中,我们可以使用TRIM函数来进行等效检查:
DECLARE @whitespaces nvarchar(50) =
NCHAR(0x0020) + NCHAR(0x00A0) + NCHAR(0x1680) + NCHAR(0x1680) + NCHAR(0x2001)
+ NCHAR(0x2002) + NCHAR(0x2003) + NCHAR(0x2004) + NCHAR(0x2005) + NCHAR(0x2006)
+ NCHAR(0x2007) + NCHAR(0x2008) + NCHAR(0x2009) + NCHAR(0x200A) + NCHAR(0x202F)
+ NCHAR(0x205F) + NCHAR(0x3000) + NCHAR(0x2028) + NCHAR(0x2029) + NCHAR(0x0009)
+ NCHAR(0x000A) + NCHAR(0x000B) + NCHAR(0x000C) + NCHAR(0x000D) + NCHAR(0x0085);
SELECT *
FROM X
WHERE a IS NULL OR TRIM(@whitespaces FROM a) = ''
由于在这个问题中a
不为null,因此可以将其从WHERE
子句中省略。
select *
from x
where len(ltrim(rtrim(coalesce(a,'')))) = 0
经过检查我的查询,似乎使用ltrim和rtrim是多余的,只需要使用一个即可。
以下内容将足够。
select *
from x
where len(ltrim(coalesce(a,''))) = 0
对于完整的ASCII空白字符(制表符、换行符、空格等)以及根据需要添加其他字符的灵活性,例如CHAR(0):
WITH
num256 AS (
SELECT TOP 256 ROW_NUMBER() OVER(ORDER BY (SELECT 1)) n
FROM master.dbo.spt_values
),
filter AS (
SELECT CHAR(n-1) c FROM num256
WHERE n NOT IN (0x09,0x0A,0x0B,0x0C,0x0D,0x20,0x85,0xA0)
)
SELECT MyColumn
FROM MyTable
WHERE NOT EXISTS(
SELECT 1
FROM filter
WHERE MyColumn LIKE '%'+c+'%'
)
declare @temp nvarchar(max) = ' ';
if(@temp is null
or
LEN(LTRIM(RTRIM(@temp))) = 0)
begin
print 'it is empty or null'
end
您可以通过在 where 子句中包含逻辑来使其成为内联。
select *
from someTable
where
aValue is null
or
LEN(LTRIM(RTRIM(aValue))) = 0
ISBLANK()
怎么样? - Tripp Kinetics