为什么我在结果中得到*
,我有两位数。?
Declare @Product TABLE(id int identity(1,1),Cust VARCHAR(25),
Product VARCHAR(20), QTY INT)
INSERT INTO @Product(Cust, Product, QTY)
VALUES('KATE','VEG',2),
('KATE','SODA',6),
('KATE','MILK',1),
('KATE','BEER',12),
('FRED','MILK',3),
('FRED','BEER',24),
('KATE','VEG',3)
select *,TRY_CONVERT(varchar(1),QTY) qty1 from @Product
答案 0 :(得分:4)
您只在TRY_CONVERT(VARCHAR(1), QTY) qty1
中指定了一个字符。
如果您将其更改为VARCHAR(2)
,则会有效:
DECLARE @Product TABLE
(
id INT IDENTITY(1, 1) ,
Cust VARCHAR(25) ,
Product VARCHAR(20) ,
QTY INT
)
INSERT INTO @Product
( Cust, Product, QTY )
VALUES ( 'KATE', 'VEG', 2 ),
( 'KATE', 'SODA', 6 ),
( 'KATE', 'MILK', 1 ),
( 'KATE', 'BEER', 12 ),
( 'FRED', 'MILK', 3 ),
( 'FRED', 'BEER', 24 ),
( 'KATE', 'VEG', 3 )
SELECT * ,
TRY_CONVERT(VARCHAR(2), QTY) qty1
FROM @Product
我不确定您为什么要将QTY
转换为VARCHAR
,因为它是INT
。如果您有QTY = 200
,则必须增加大小。
您认为*
{{1}}的原因是由于@ truncation of values中的@Damien_The_Unbeliever所提到的指定数据类型太大而导致comment。
答案 1 :(得分:4)
这是因为生成的数据类型太短而无法显示。根据{{3}}
截断和舍入结果
转换字符或二进制表达式时(char,nchar, nvarchar,varchar,binary或varbinary)到a的表达式 不同的数据类型,数据可以被截断,只能部分显示, 或者返回错误,因为结果太短而无法显示。 转换为char,varchar,nchar,nvarchar,binary和varbinary 被截断,但以下所示的转换除外 表
从int , smallint, or tinyint
转换为char /varchar
答案 2 :(得分:3)
这是因为您明确尝试将其转换为varchar(1)
,如下所示,它将起作用:
select *,TRY_CONVERT(varchar(2),QTY) qty1 from Product
如果您想将int,Float,Real
值转换为varchar,请使用STR(),因为它可以更好地控制格式。
STR()
函数是为具有小数点的近似数字(浮点)数据类型定义的,默认情况下,小数点又舍入为整数。
答案 3 :(得分:1)
查询返回*,因为每当整数转换为(var)char并且其长度小于指定时,sql server返回*。您可以通过转换为varchar(2)来解决您的问题。看这篇文章 Why cast/convert from int returns an asterisk有关SQL返回*而非引发错误的更多信息。简而言之,这似乎是遗留行为。