我有问题。当我使用2之1的查询时:
select * from GMIS.dbo.TELLER_HIS WHERE ID = 'TT1821103235;1 'AND DR_CR_MARKER = 'DEBIT '
select * from GMIS.dbo.TELLER_HIS WHERE ID = 'TT1821103235;1' AND DR_CR_MARKER = 'DEBIT'
答案 0 :(得分:1)
我认为,您实际上是在问为什么'abcdefg' = 'abcdefg '
的计算结果为TRUE? (您的“问题” 非常不清楚。)
这是SQL Server处理(n)varchar
和(n)char
数据类型的方式。使用(n)varchar
时,值为“未填充”。因此,值'abcdefg '
将被视为'abcdefg'
。因此,'abcdefg' = 'abcdefg '
为何为TRUE。
对于(n)char
,将数据填充为数据类型的长度。例如,以char(12)
为例:值'abcdefg'
和'abcdefg '
都将被视为'abcdefg '
,因此也取值为TRUE。
示例:
SELECT CASE WHEN CONVERT(varchar(20),'abcdefg') = CONVERT(varchar(20),'abcdefg ') THEN 1 ELSE 0 END;
SELECT CASE WHEN CONVERT(char(20),'abcdefg') = CONVERT(char(20),'abcdefg ') THEN 1 ELSE 0 END;
这两个语句都返回1
;
答案 1 :(得分:0)
您可以在SQL Server中使用LTRIM & RTRIM函数
SELECT *
FROM GMIS.dbo.TELLER_HIS
WHERE LTRIM(RTRIM(ID)) = 'TT1821103235;1'
AND LTRIM(RTRIM(DR_CR_MARKER)) = 'DEBIT'
如果要区分这些查询,请使用类似运算符
没有空格
SELECT *
FROM GMIS.dbo.TELLER_HIS
WHERE LTRIM(RTRIM(ID)) = 'TT1821103235;1'
AND LTRIM(RTRIM(DR_CR_MARKER)) like 'DEBIT'
有空格
SELECT *
FROM GMIS.dbo.TELLER_HIS
WHERE LTRIM(RTRIM(ID)) = 'TT1821103235;1 '
AND LTRIM(RTRIM(DR_CR_MARKER)) like 'DEBIT '
带空格的“喜欢”查询将不提供任何数据。