Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Microsoft T-SQL:我可以将smallint转换为varchar吗_Sql Server_Tsql_Sql Convert - Fatal编程技术网

Sql server Microsoft T-SQL:我可以将smallint转换为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,因为它们

也许只是我,但是。。。尽管大多数SQL开发人员可能认为CAST和转换是非常基本的东西,这可能是真的,但我发现微软的Cask& Cdage页面是我见过的最丑陋、不直观、难以理解的东西之一。他们的很多文档都很棒。就像不断尝试将整个页面混合成演员和转换,在每个句子中来回跳跃。。。而不是单独处理它们。谁把target_类型作为第一个参数?将表达式作为第一个参数会更直观,并且遵循其他99%的编程语言语法。嗯

MS表示我只能转换为3种数据类型:(事实上,我不确定这是否适用于CAST和CONVERT,因为它们实际上是不同的……但根据该网页的布局,它显然同样适用于两者——尽管我已经知道事实上CAST并不适用,我更经常使用CAST)

它说:“是目标数据类型。这包括xml、bigint和sql_变量”

暂且不提我一直在丢弃许多其他数据类型(date、varchar)的事实

我眼前的问题是:如果我只能转换为这些数据类型,那么为什么这样做

select CONVERT(varchar(200), cast(50 as smallint))
最后,我想运行一个
INSERT
,它将得到一个
smallint
,并将其放入
varchar(200)
列中

我所要做的就是避免任何失败,所以也许我并不真的“需要”转换或转换到
varchar
,而是在

  • 回答我对
    CONVERT
    文档的明显误解是什么
  • 如何安全地将其转换为insert to
    varchar
  • 欢迎你。只要你不是太不愉快,因为总是有一些微软的粉丝在批评微软的时候会变得火辣辣的:|

    是的,你可以将smallint转换为varchar

    1) 回答我对皈依者的明显误解是什么 文件

    这可能是由于对什么是数据类型、如何将它们从一种类型转换为另一种类型以及同样重要的数据类型缺乏了解所致对于数据类型的美学表示,有哪些样式。

    强制转换是一种显式强制转换操作,没有样式选项。 CONVERT也是一种显式转换,它使您能够为输出指定样式

    文件明确指出:

    隐式转换

    隐式转换是指在没有 指定强制转换或转换函数。显式转换 是那些需要转换或转换函数的转换 明确规定。下图显示了所有显式和隐式 提供的SQL Server系统允许的数据类型转换 数据类型。其中包括xml、bigint和sqlu变量。没有 sql_变量数据类型赋值时的隐式转换,但 存在到sql_变量的隐式转换

    关于你的第二个问题

    2) 如何安全地将其转换为insert到varchar

    取决于你所说的安全。转换为varchar是最有可能成功的转换。但是,无论何时转换到任何toher数据类型,您都在本质上改变了数据的本质,并且在转换到较小的类型(或应用样式)时将失去精度

    文件明确指出:

    截断和舍入结果

    转换字符或二进制表达式(char、nchar、, nvarchar、varchar、binary或VARBINAL)的表达式 不同的数据类型,数据可以被截断,只能部分显示, 或者返回错误,因为结果太短,无法显示。 转换为char、varchar、nchar、nvarchar、binary和varbinary 被截断,以下所示的转换除外 桌子


    换句话说,施法从来都不安全。

    数字总是被我悄悄地截断。我提议:

    选项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个字符表示减号
    Smallint存储从“-32768”到“32767”的2个字节,需要varchar(6): -数字为5个字符 -1个字符表示减号


    不确定您是否需要数千个分隔符的字符,或者是否可以通过设置进行更改。

    您忘记了以“/rant”:”结尾。您指的是哪个文档页?这三种数据类型并没有太多限制。这三种数据类型都包括在内,从“这包括xml、bigint和sql_变体”这一行可以推断出这一点。这些只是你可以使用的类型的例子,不是你唯一可以使用的类型。是的,我想“包括”意味着包括,不一定限于,你是对的。然而,这是多么令人难以置信的无用/麻烦的陈述啊。想象一下,如果我制作了一个程序并说,“在下一个屏幕上,用允许的值填充关键参数。允许的值包括红色和蓝色”。但实际上有50个允许值。该死。是的,杰夫,我确实忘记了那句话。虽然大多数评论实际上对咆哮而不是随后的问题更感兴趣,但这不是很有趣吗?嗯,也许说了些关于我们所有咆哮的享受的事情(也许?:)好吧,好吧,我知道在某个时候会有一个强烈的警告,所以你的评论——我认为在某种程度上,你的评论可能比fai更过分地指向我的无能