SQL 简单的返回值区别
CREATE TABLE t1
(
c1 varchar(3),
c2 char(3)
)
GO
INSERT INTO t1 VALUES ('2', '2')
INSERT INTO t1 VALUES ('37', '37')
INSERT INTO t1 VALUES ('597', '597')
GO
SELECT REPLICATE('0', 3 - DATALENGTH(c1)) + c1 AS 'Varchar Column',
REPLICATE('0', 3 - DATALENGTH(c2)) + c2 AS 'Char Column'
FROM t1
GO
Varcgar Column Char Column
002 2
037 37
597 597
为什么会返回不一样的值 ,一样的值,一样的写法。
就是类型不一样。
感觉 下面的内条语句 REPLICATE('0', 3 - DATALENGTH(c2)) + c2 AS 'Char Column'
并没有把‘0’当成字符型, 而是直接当成了。数字型0,所有才没有返回数据前面的0
求高手解答阿。
[解决办法]
SELECT DATALENGTH(c1) as c1len,DATALENGTH(c2) as c2lenFROM t1
[解决办法]
如楼上所说,char型数据,如果字符串没有填满,后面则跟随' '
代码更改为如下即可:
CREATE TABLE t1 ( c1 varchar(3), c2 char(3))GOINSERT INTO t1 VALUES ('2', '2')INSERT INTO t1 VALUES ('37', '37')INSERT INTO t1 VALUES ('597', '597')GOSELECT REPLICATE('0', 3 - DATALENGTH(c1)) + c1 AS 'Varchar Column', REPLICATE('0', 3 - DATALENGTH(rtrim(c2))) + c2 AS 'Char Column'FROM t1drop table t1/*Varchar Column Char Column -------------- ------------002 002 037 037 597 597(所影响的行数为 3 行)*/