首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql转换忽略格式?

sql转换忽略格式?
EN

Stack Overflow用户
提问于 2012-01-04 11:30:01
回答 3查看 700关注 0票数 1

跑步:

代码语言:javascript
复制
SELECT CONVERT(VARCHAR(20), GETDATE(), 100)

将产生以下结果:

代码语言:javascript
复制
Jan  4 2012  1:25PM

我已经知道这件事很多年了。

然而,昨天,当我开车的时候,我心里想:

嘿!我给了他103格式的日期时间格式, 但我并没有告诉转换程序,我也传递了一个datetime对象!(例如getdate())

所以我试过:

代码语言:javascript
复制
SELECT CONVERT(VARCHAR(20), 'lalala', 100)

结果是:

代码语言:javascript
复制
lalala

因此,现在我试图通过datetime格式(103)将'lalala‘转换成字符串。

这(从逻辑上说)应该给我一个例外。

但事实并非如此。

有合理的解释吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-04 12:26:08

CONVERT同时考虑了目标类型和表达式的类型,以查看是否应该考虑第三个参数。如果要将日期时间转换为字符串或相反的方式,则会考虑第三个参数。在您的示例中,字符串被转换为字符串,因此忽略了第三个参数。

考虑到这一点:

代码语言:javascript
复制
SELECT 1, CONVERT(datetime, '03/01/2011', 103)
SELECT 2, CONVERT(datetime, '03/01/2011', 101)
SELECT 3, CONVERT(varchar, '03/01/2011', 103)
SELECT 4, CONVERT(varchar, '03/01/2011', 101)

以下是研究结果:

代码语言:javascript
复制
--- -----------------------
1   2011-01-03 00:00:00.000

--- -----------------------
2   2011-03-01 00:00:00.000

--- ------------------------------
3   03/01/2011

--- ------------------------------
4   03/01/2011

正如您所看到的,最后两个“转换”没有改变任何东西,因为源类型和目标类型都是varchar,尽管表达式看起来像一个date/datetime

参考资料:

  • 强制转换和转换(Transact-SQL)
票数 1
EN

Stack Overflow用户

发布于 2012-01-04 11:42:26

转换函数只使用第三个参数(style),如果第二个参数(data_to_be_converted)是datetime

如果它已经是varchar,那么它就是returns值,什么都不要做。

票数 0
EN

Stack Overflow用户

发布于 2012-01-04 11:48:40

转换的MSDN文档说样式参数是根据传递的值的类型来解释的,所以我猜它会检查值,并能判断它是哪种类型。

例如,注意'1‘的样式意味着日期时间的"mm/dd/yy“和浮点值的”总是8位数。始终在科学符号中使用“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8726106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档