当前位置: 代码迷 >> Sql Server >> SQL 简单的返回值区别解决办法
  详细解决方案

SQL 简单的返回值区别解决办法

热度:76   发布时间:2016-04-27 14:14:02.0
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
求高手解答阿。

------解决方案--------------------
SQL code
SELECT DATALENGTH(c1) as c1len,DATALENGTH(c2) as c2lenFROM t1
------解决方案--------------------
如楼上所说,char型数据,如果字符串没有填满,后面则跟随' '
代码更改为如下即可:

SQL code
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 行)*/
  相关解决方案