Я хотел бы знать, как использовать NULL и пустую строку в то же время в предложении WHERE
в SQL Server. Мне нужно найти записи, которые имеют либо нулевые значения, либо пустую строку. Благодарю.Как использовать NULL или пустую строку в SQL
ответ
Select *
From Table
Where (col is null or col = '')
Или
Select *
From Table
Where IsNull(col, '') = ''
в соответствии с ответом @Bradc в этом http://stackoverflow.com/questions/799584/what-makes-a-sql-statement-sargable?lq=1, лучше использовать первый подход. –
SELECT *
FROM TableName
WHERE columnNAme IS NULL OR
LTRIM(RTRIM(columnName)) = ''
Спасибо J W Мне удалось заставить его сработать. – poshan
SELECT * FROM TableName WHERE columnNAme IS NULL ИЛИ RTRIM (columnName) = '' –
Как указывает Ксавье, нет необходимости делать BOTH 'ltrim' и' rtrim', если целью является просто сравнение с пустой строкой. ПРИЧИНА: если есть ТОЛЬКО пробелы, одна отделка удалит все из них. Например, вам все равно, не сравнится ли сравнение, потому что остается «abc» или «abc». – ToolmakerSteve
Вы можете просто сделать это:
SELECT *
FROM yourTable
WHERE yourColumn IS NULL OR yourColumn = ''
SELECT *
FROM Table
WHERE column like '' or column IS NULL OR LEN(column) = 0
Я ценю ваше предложение, спасибо FaceOfJock – poshan
Вы можете использовать isnull
функцию, чтобы получить как null
и пустые значения текстового поля :
SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''
Функция isnull буквально просто проверяет, имеет ли значение значение null. Он не будет работать, если строка пуста (""). –
@Max Pringle. Я не утверждаю иначе. Также предоставленный код адресует запрос. Не уверен в вашем вкладе. Предложите редактировать вместо downvoting. –
возьмет ваш совет. Теперь я ввел предлагаемое редактирование. Это предложение where получает только нулевые значения, а не пустые значения строки. Для получения пустых значений можно использовать nullif. –
--setup
IF OBJECT_ID('tempdb..#T') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T(ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, NAME VARCHAR(10))
INSERT INTO #T (Name) VALUES('JOHN'),(''),(NULL);
SELECT * FROM #T
1 JOHN
2 -- is empty string
3 NULL
Вы можете исследовать ''
как NULL
путем преобразования его в NULL
используя NULLIF
--here you set '' to null
UPDATE #T SET NAME = NULLIF(NAME,'')
SELECT * FROM #T
1 JOHN
2 NULL
3 NULL
или вы можете проверить NULL
как ''
с использованием SELECT ISNULL(NULL,'')
-- here you set NULL to ''
UPDATE #T SET NAME = ISNULL(NULL,'') WHERE NAME IS NULL
SELECT * FROM #T
1 JOHN
2 -- is empty string
3 -- is empty string
--clean up
DROP TABLE #T
Это некрасиво MSSQL:
CASE WHEN LTRIM(RTRIM(ISNULL([Address1], ''))) <> '' THEN [Address2] ELSE '' END
Чтобы найти строки, где столбец является NULL
, пустая строка или пробелы (пробелы, вкладки):
SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''
Чтобы найти строки, где столбец является NOT NULL
, пустая строка или пробелы (пробелы, вкладки):
SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''
Некоторые sargable методы ...
SELECT *
FROM #T
WHERE SomeCol = '' OR SomeCol IS NULL;
SELECT *
FROM #T
WHERE SomeCol = ''
UNION ALL
SELECT *
FROM #T
WHERE SomeCol IS NULL;
SELECT *
FROM #T
WHERE EXISTS ((SELECT NULL UNION SELECT '') INTERSECT SELECT SomeCol);
А некоторые не sargable те ...
SELECT *
FROM #T
WHERE IIF(SomeCol <> '',0,1) = 1;
SELECT *
FROM #T
WHERE NULLIF(SomeCol,'') IS NULL;
SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';
В запросе выбора кто-то может использовать, как это.
SELECT ct.ID,
ISNULL(NULLIF(ct.LaunchDate, ''), null) [LaunchDate]
FROM [dbo].[CustomerTable] ct
вы можете заменить null
со своим значением замещения.
мое лучшее решение:
WHERE COALESCE(char_length(fieldValue), 0) = 0
COALESCE возвращает первый ненулевой выраж в списке выражений().
если fieldValue является пустой или пустой строкой, то: мы вернем второй элемент, затем 0.
поэтому 0 равно 0, то это полеValue является пустой или пустой строкой.
в питоне для Exemple:
def coalesce(fieldValue):
if fieldValue in (null,''):
return 0
удачи
Я сделал это. благодаря –
В sproc, вы можете использовать следующее условие:
DECLARE @USER_ID VARCAHR(15)=NULL --THIS VALUE IS NULL OR EMPTY DON'T MATTER
IF(COALESCE(@USER_ID,'')='')
PRINT 'HUSSAM'
этой функцией:
ALTER FUNCTION [dbo].[isnull](@input nvarchar(50),@ret int = 0)
RETURNS int
AS
BEGIN
return (case when @input='' then @ret when @input is null then @ret else @input end)
END
и используйте это:
dbo.isnull (значение, 0)
SELECT * FROM DBO.AGENDA
WHERE
--IF @DT_START IS NULL OR EMPTY
(ISNULL(@DT_START,'') = '' AND DT_START IS NOT NULL) -- GET ALL DATE
OR --ELSE
(DT_START >= @DT_START) --FILTER
-- MORE FILTER
SELECT * FROM DBO.AGENDA
WHERE
((ISNULL(@DT_START,'') = '' AND DT_START IS NOT NULL) OR (DT_START >= @DT_START))
AND
DT_END < GETDATE()
Там есть ключевое слово OR в SQL. –
Этот вопрос не показывает никаких исследований. Очень важно сделать домашнее задание **. Расскажите нам, что вы нашли, и *** почему *** это не соответствовало вашим потребностям. Это демонстрирует, что вы потратили время, чтобы попытаться помочь себе, это избавляет нас от повторения очевидных ответов и, прежде всего, помогает вам получить более конкретный и релевантный ответ. [FAQ] (http://stackoverflow.com/questions/how-to-ask). – Kermit
Возможный дубликат [Как выбрать данные из таблицы MySQL, где столбец равен NULL] (http://stackoverflow.com/questions/14279947/how-to-select-data-from-mysql-table-where-a-column -is-null) (это был вопрос MySQL, но это в основном тот же ответ для t-sql) –