我想编写一个查询,它将从一个表中选择所有字符串值等于两列连接在一起的表。
这是简单的英文版本:
@MYSTRING varchar(50)
SELECT ALL FROM [FFLOCNP] WHERE COLUMN1 + COLUMN2 = @MYSTRING
我曾尝试过使用COALESCE,但之前我从未使用过它,它给我一个错误:
@CODE varchar(50)
SELECT * FROM [dbo].[FFLOCNP] WHERE COALESCE([LOCTRY], '') || COALESCE([LOCLCN], '') = @CODE
答案 0 :(得分:0)
你必须使用ISNULL。 使用以下查询可能会对您有所帮助。
SELECT * FROM [FFLOCNP] WHERE ISNULL(COLUMN1,'') + ISNULL(COLUMN2,'') = @MYSTRING
答案 1 :(得分:0)
使用ISNULL而不是COALESCE时要小心。 ISNULL将返回值限制为第一个输入参数的数据类型。在给定的示例中,列V1将使用nvarchar(1)隐式定义,因为列V1中的最长文本仅包含一个字符。 ISNULL(V1,[param2])将始终返回一个字符长的字符串,无论第二个参数的长度如何。在你的情况下,如果你想用空字符串替换NULL,ISNULL会工作。如果你想用更长的字符串替换NULL,那么你必须使用COALESCE而不是ISNULL。无论参数1的数据类型如何,COALESCE都返回参数2中的完整字符串。除此之外,COALESCE是标准SQL,而ISNULL是SQL-Server的一种风格。标准SQL应优先于T-SQL风格,以获得更多可移植代码。
WITH CTE_SRC AS
(
SELECT
[V1]
,[V2]
FROM
(VALUES
(N'A', N'BB')
,(NULL, N'BB')
,(N'A', NULL)
) T([V1],[V2])
)
SELECT
ISNULL([V1], '1234') AS [ISNULL]
,COALESCE([V1], '123') AS [COALESCE]
FROM
CTE_SRC
Result
ISNULL COALESCE
------ --------
A A
1 123
A A