sql server-как найти строки с пробелами в столбце
Я хочу сделать что-то вроде
select * from X where string.IsNullOrWhiteSpace(a)
столбец a является NOT NULL
Итак, что было бы эквивалентом C# string.IsNullOrWhiteSpace
в T-SQL, чтобы получить все строки, где столбец a имеет только пробелы (сочетание нескольких пробелов или вкладок)?
кроме того, я бы предпочел избежать использования clr функции.
6 ответов
вы можете попробовать это:
select *
from yourtable
where ltrim(rtrim(yourcolumn)) = ''
идея в том, что если обрезка значения оставляет вас с пустой строкой, то все, что у вас было в первую очередь, это пробелы.
вы также можете просто сделать это:
select *
from yourtable
where yourcolumn like ' '
обратите внимание, что я протестировал второй запрос на SQL Server 2008 R2, и он не работает в 2014 году, как указано в комментариях @gunr2171
наконец, если у вас есть табуляции, возврата каретки или перевода строки, выше не получится. Что ты можешь сделать? сначала нужно заменить эти значения пустой строкой, а затем использовать первый запрос следующим образом:
select *
from yourtable
where ltrim(rtrim(replace(replace(replace(yourcolumn,char(9),''),char(10),''),char(13),''))) = ''
char(9)
,char(10)
и char(13)
использованы для платы, линии питания и возвращения экипажа соответственно.
на основе shree.комментарий ТРГ-18, вот возможный ответ...
select *
from yourtable
where ltrim(rtrim(yourcolumn)) = '' or yourcolumn is null
Я думаю, что это должно сделать трюк
У меня просто была проблема с этой конкретной ситуацией, мне нужно было найти и очистить каждое поле с пробелами, но я нашел 4 типа возможных пробелов в моих полях базы данных (ссылка на таблица кодов ASCII):
- горизонтальная вкладка(char (9))
- новая строка(char (10))
- вертикальная вкладка(char (9))
- пробел(char (32))
возможно, этот запрос может вам помочь.
SELECT @COLUMN
FROM @TABLE
WHERE @COLUMN like '%'+CHAR(9)+'%' or @COLUMN like '%'+CHAR(10)+'%'
or @COLUMN like '%'+CHAR(11)+'%' or @COLUMN like '%'+CHAR(32)+'%'
Я бы попробовал что-то вроде этого
select *
from x
where len(ltrim(rtrim(coalesce(a,'')))) = 0
после изучения моего запроса было бы излишним использовать ltrim и rtrim, просто используйте один или другой.
следующая хватит
select *
from x
where len(ltrim(coalesce(a,''))) = 0
для полных пробелов ASCII (вкладки, каналы строк, пробелы и т. д.) и гибкость добавления других символов по мере необходимости, i.E 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+'%'
)
вот пример оператора If, который проверяет, является ли переменная нулевой или пробелом (эквивалент c#IsNullOrWhitespace
).
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