将varchar转换为INT [英] converting varchar to INT

查看:392
本文介绍了将varchar转换为INT的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好SQL Server专家,

Hi SQL Server Experts,

有人知道,为什么我的转换失败了?我四处搜索并想出了那些演员函数,但似乎都没有。

Does someone know, why my conversion fails? I searched around and came up with those casting functions but none seems to work.


create table orders
(
hoursworked varchar(50)
);

INSERT INTO orders (hoursworked) VALUES ('8,5');

select 
CAST(REPLACE(hoursworked,',','.') AS INT), 
CONVERT(INT,
        CASE
        WHEN IsNumeric(CONVERT(VARCHAR(12), hoursworked)) = 1 THEN CONVERT(VARCHAR(12),hoursworked)
        ELSE 0 END) 
from orders where hoursworked ='8,5'

推荐答案

原因8.5是浮点数。

Cause 8.5 is a float.

例如

DECLARE @orders TABLE (
    hoursworked VARCHAR(50)
);

INSERT INTO @orders ( hoursworked )
VALUES ( '8,5' );

SELECT CAST(REPLACE(hoursworked, ',', '.') AS NUMERIC(9, 2)) ,
       CONVERT(NUMERIC(9, 2), REPLACE(hoursworked, ',', '.'))
FROM   @orders
WHERE  hoursworked = '8,5';

此外,我看不出感觉在您的ISNUMERIC()测试中。使用
TRY_CAST()
/
TRY_PARSE()
代替:

Also I don't see the sense in your ISNUMERIC() test. Use TRY_CAST() / TRY_PARSE() instead:

DECLARE @orders TABLE (
    hoursworked VARCHAR(50)
);

INSERT INTO @orders ( hoursworked )
VALUES ( '8,5' );

SELECT TRY_PARSE(hoursworked AS NUMERIC(9, 2)) ,
       TRY_PARSE(hoursworked AS NUMERIC(9, 2) USING 'de-DE') ,
       TRY_CAST(hoursworked AS NUMERIC(9, 2)) ,
       TRY_CAST(REPLACE(hoursworked, ',', '.') AS NUMERIC(9, 2))
FROM   @orders
WHERE  hoursworked = '8,5';


这篇关于将varchar转换为INT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆