Sql server Microsoft T-SQL:我可以将smallint转换为varchar吗
也许只是我,但是。。。尽管大多数SQL开发人员可能认为CAST和转换是非常基本的东西,这可能是真的,但我发现微软的Cask& Cdage页面是我见过的最丑陋、不直观、难以理解的东西之一。他们的很多文档都很棒。就像不断尝试将整个页面混合成演员和转换,在每个句子中来回跳跃。。。而不是单独处理它们。谁把target_类型作为第一个参数?将表达式作为第一个参数会更直观,并且遵循其他99%的编程语言语法。嗯 MS表示我只能转换为3种数据类型:(事实上,我不确定这是否适用于CAST和CONVERT,因为它们实际上是不同的……但根据该网页的布局,它显然同样适用于两者——尽管我已经知道事实上CAST并不适用,我更经常使用CAST) 它说:“是目标数据类型。这包括xml、bigint和sql_变量” 暂且不提我一直在丢弃许多其他数据类型(date、varchar)的事实 我眼前的问题是:如果我只能转换为这些数据类型,那么为什么这样做Sql server Microsoft T-SQL:我可以将smallint转换为varchar吗,sql-server,tsql,sql-convert,Sql Server,Tsql,Sql Convert,也许只是我,但是。。。尽管大多数SQL开发人员可能认为CAST和转换是非常基本的东西,这可能是真的,但我发现微软的Cask& Cdage页面是我见过的最丑陋、不直观、难以理解的东西之一。他们的很多文档都很棒。就像不断尝试将整个页面混合成演员和转换,在每个句子中来回跳跃。。。而不是单独处理它们。谁把target_类型作为第一个参数?将表达式作为第一个参数会更直观,并且遵循其他99%的编程语言语法。嗯 MS表示我只能转换为3种数据类型:(事实上,我不确定这是否适用于CAST和CONVERT,因为它们
select CONVERT(varchar(200), cast(50 as smallint))
最后,我想运行一个INSERT
,它将得到一个smallint
,并将其放入varchar(200)
列中
我所要做的就是避免任何失败,所以也许我并不真的“需要”转换或转换到varchar
,而是在
CONVERT
文档的明显误解是什么varchar
换句话说,施法从来都不安全。数字总是被我悄悄地截断。我提议: 选项1 将转换后的值与原始值进行比较
DECLARE @ORIGINAL DECIMAL(13,2) = -99999999999.99 --
DECLARE @EXPECTED VARCHAR(15) = ''
SELECT @EXPECTED = CONVERT(VARCHAR(15),@ORIGINAL)
IF CONVERT(DECIMAL(13,2),@EXPECTED) != @ORIGINAL SELECT 'Ooops'
选项2
确保所有可能的值都适合target varchar
十进制(13,2)。最宽的数字可能是“-99999999.99”需要varchar(15):
- 数字为13个字符
- 小数分隔符为1个字符
- 1个字符表示减号
不确定您是否需要数千个分隔符的字符,或者是否可以通过设置进行更改。您忘记了以“/rant”:”结尾。您指的是哪个文档页?这三种数据类型并没有太多限制。这三种数据类型都包括在内,从“这包括xml、bigint和sql_变体”这一行可以推断出这一点。这些只是你可以使用的类型的例子,不是你唯一可以使用的类型。是的,我想“包括”意味着包括,不一定限于,你是对的。然而,这是多么令人难以置信的无用/麻烦的陈述啊。想象一下,如果我制作了一个程序并说,“在下一个屏幕上,用允许的值填充关键参数。允许的值包括红色和蓝色”。但实际上有50个允许值。该死。是的,杰夫,我确实忘记了那句话。虽然大多数评论实际上对咆哮而不是随后的问题更感兴趣,但这不是很有趣吗?嗯,也许说了些关于我们所有咆哮的享受的事情(也许?:)好吧,好吧,我知道在某个时候会有一个强烈的警告,所以你的评论——我认为在某种程度上,你的评论可能比fai更过分地指向我的无能