我们都知道Text类型的字段不能进行<>,=等比较操作,也不能使用replace函数替换。
要比较Text类型,只能使用like.
如果不用like,有没有其它办法来进行比较呢?
答案肯定是有的,使用SUBSTRING函数转换。
--例子
代码
IF
OBJECT_ID
(
'
tempdb..#TestText
'
)
IS
NOT
NULL
DROP TABLE #TestText
CREATE TABLE #TestText (
Text1 text ,
Text2 text ,
varchar1 varchar ( max ),
varchar2 varchar ( max ))
INSERT INTO #TestText(Text1,
Text2,
varchar1,
varchar2 )
VALUES ( ' a text string for col1 ' , ' a text string for col2 ' , ' varchar_a ' , ' varchar_b ' )
-- Text不可以这样操作
SELECT * FROM #TestText WHERE Text1 <> Text2
SELECT * FROM #TestText WHERE Text1 = ' a '
-- nvarchar可以这样操作
SELECT * FROM #TestText WHERE varchar1 <> varchar2
-- 使用SUBSTRING函数,一切都可以解决了
SELECT * FROM #TestText WHERE SUBSTRING (Text1, 1 , datalength (Text1)) <> SUBSTRING (Text2, 1 , datalength (Text2))
SELECT * FROM #TestText WHERE SUBSTRING (Text1, 1 , datalength (Text1)) = ' a '
SELECT replace ( SUBSTRING (Text1, 1 , datalength (Text1)), ' a ' , ' b ' ) FROM #TestText
DROP TABLE #TestText
CREATE TABLE #TestText (
Text1 text ,
Text2 text ,
varchar1 varchar ( max ),
varchar2 varchar ( max ))
INSERT INTO #TestText(Text1,
Text2,
varchar1,
varchar2 )
VALUES ( ' a text string for col1 ' , ' a text string for col2 ' , ' varchar_a ' , ' varchar_b ' )
-- Text不可以这样操作
SELECT * FROM #TestText WHERE Text1 <> Text2
SELECT * FROM #TestText WHERE Text1 = ' a '
-- nvarchar可以这样操作
SELECT * FROM #TestText WHERE varchar1 <> varchar2
-- 使用SUBSTRING函数,一切都可以解决了
SELECT * FROM #TestText WHERE SUBSTRING (Text1, 1 , datalength (Text1)) <> SUBSTRING (Text2, 1 , datalength (Text2))
SELECT * FROM #TestText WHERE SUBSTRING (Text1, 1 , datalength (Text1)) = ' a '
SELECT replace ( SUBSTRING (Text1, 1 , datalength (Text1)), ' a ' , ' b ' ) FROM #TestText