Совместимый SQL для проверки непустых и непустых строк

Я хочу иметь совместимый SQL как для базы данных Oracle, так и для сервера Microsoft SQL.

Мне нужно совместимое выражение SQL, которое будет возвращать истину для непустых и непустых строк.

Если я использую:

column <> ''

, он будет работать на сервере Microsoft SQL, но не в базе данных Oracle (поскольку '' имеет значение NULL для Oracle)

Если я использую:

len(column) > 0

, он будет работать на сервере Microsoft SQL, но не на База данных Oracle (поскольку она использует length ())

22
задан Eduardo 23 June 2011 в 16:48
поделиться

1 ответ

NULLIF доступно как в Oracle ( doc ), так и в SQL Server ( doc ). Это выражение должно работать:

NULLIF(column, '') IS NOT NULL

На обоих серверах, если column равно NULL, то вывод NULLIF просто пропустит значение NULL. В SQL Server '' = '' вывод NULLIF будет NULL. В Oracle '' уже является NULL, поэтому его пропускают.

Это мой тест на SQL Server 2008 R2 Express:

WITH SampleData AS
    (SELECT 1 AS col1, NULL AS col2
     UNION ALL
     SELECT 2, ''
     UNION ALL
     SELECT 3, 'hello')
SELECT *
  FROM SampleData
 WHERE NULLIF(col2, '') IS NOT NULL;

И это мой тест на Oracle 10g XE:

WITH SampleData AS
    (SELECT 1 AS col1, NULL AS col2 FROM DUAL
     UNION ALL
     SELECT 2, '' FROM DUAL
     UNION ALL
     SELECT 3, 'hello' FROM DUAL)
SELECT *
  FROM SampleData
 WHERE NULLIF(col2, '') IS NOT NULL;

Оба возвращают 3, как и ожидалось .

39
ответ дан 29 November 2019 в 04:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: