日期时间转换

时间:2016-05-10 18:46:06

标签: sql sql-server

我对SQL很新,不再那么新了。

我只是好奇......我只是想知道为什么我在Date次转化时看到了不一致。

为什么有些开发者会使用: SELECT CONVERT(CHAR(10), GETDATE(), 101) ==>这对我有意义: 05/24/1987 10 chars

有些使用:

SELECT CONVERT(CHAR(12), GETDATE(), 101)

有人可以打破这个吗?我们是否只是小心翼翼地使用前导/尾随空格?

我甚至见过:

SELECT CONVERT(CHAR(15), GETDATE(), 101)

为什么有人会用这个?

2 个答案:

答案 0 :(得分:2)

如果您希望数据作为字符串尽可能细,可以使用此日期字符串命令:

CONVERT(CHAR(10), GETDATE(), 20)

我认为没有任何充分的理由在最后使用101而不是20。

如果您希望数据尽可能细,如果日期仍然是日期(而不是字符串)并不重要,可以使用此命令:

convert(date, GETDATE())

最终,最终结果是每个日期几乎相同 - 每个日期的唯一值。

我猜一些开发人员可能会为某些个人表达或其他东西包含尾随空格 - 或者说,做一些奇怪的事情,以便更容易地追踪他们编写的代码,也许。

SELECT 
CONVERT(CHAR(10), GETDATE(), 101) as Datestamp_CHAR10_101
, CONVERT(CHAR(10), GETDATE(), 20) as Datestamp_CHAR20_20 -- imho, the best way to store a date as a string
, CONVERT(CHAR(12), GETDATE(), 101) as Datestamp_CHAR12_101
, CONVERT(CHAR(15), GETDATE(), 101) as Datestamp_CHAR15_101
, CONVERT(CHAR(23), GETDATE(), 121)  as Datestamp_CHAR25_131
, DATALENGTH(CONVERT(CHAR(10), GETDATE(), 101)) as DATALENGTH_CHAR10_101 -- 10
, DATALENGTH(CONVERT(CHAR(10), GETDATE(), 20)) as DATALENGTH_CHAR20_20 -- 10
, DATALENGTH(CONVERT(CHAR(12), GETDATE(), 101)) as DATALENGTH_CHAR12_101 -- 12
, DATALENGTH(CONVERT(CHAR(15), GETDATE(), 101)) as DATALENGTH_CHAR15_101 -- 15
, DATALENGTH(CONVERT(CHAR(23), GETDATE(), 121))  as DATALENGTH_CHAR25_131 -- 23
, GETDATE()
, convert(date, GETDATE()) -- Probably the best answer. Why change the data to a string ..?
, DATALENGTH(GETDATE() ) -- 8
, DATALENGTH(convert(date, GETDATE()) ) -- 3

答案 1 :(得分:0)

看看这里:https://msdn.microsoft.com/en-us/library/ms187928.aspx

你会看到世纪(yyyy)或(yy)是你的长度方差。

用101;长度为10,进行转换(12或转换(15不是必需的)

以下是一个很好的示例:http://www.sql-server-helper.com/tips/date-formats.aspx

  1. SELECT CONVERT(VARCHAR(8),GETDATE(),1)
  2. SELECT CONVERT(VARCHAR(10),GETDATE(),101)