嗨,我有一个列__date,它有样本数据,如
1900-01-01 00:00:00.000
1990-01-01 00:00:00.000
1990-01-02 00:00:00.000
1990-01-03 00:00:00.000
1990-01-04 00:00:00.000
1990-01-05 00:00:00.000
1990-01-06 00:00:00.000
1990-01-07 00:00:00.000
现在我只想选择仅日期并将其显示为103样式并将列转换为日期格式。我尝试过这种语法convert(varchar,THE_DATE , 103)
但是该列不是日期格式。
请帮助。
答案 0 :(得分:1)
本作品尝试一次
SELECT CONVERT(varchar,CAST(DATE_TIME AS DATE),103)AS Date_Time From <yourTable>
答案 1 :(得分:0)
将字符串(或等效的数据库类型)转换为另一种类型称为“解析”。将另一种类型转换为字符串称为“格式化”。
DATE
或DATETIME
类型(或前端中的等效类型)不会将日期存储为字符串,因此没有格式。数字用于表示内部日期,该日期计算自参考日期以来的天数(SQL Server的1753-01-01)。时间表示为小数。
当然,在打开表格时,您始终会看到日期格式化,因为它会转换为文本进行显示,但不会以格式化格式存储。
所以,如果您的日期是以文本形式提供的,那么您需要做的是使用121格式(YYYY-MM-DD HH:MI:SS.MMM(24h))解析它以获得{{1} }(或DATE
)。
DATETIME
如果CONVERT(DATE, the_date, 121) or CONVERT(DATETIME, the_date, 121)
已经是the_date
(或DATE
)类型,并且您希望以103格式显示它(DD / MM / YYYY)
DATETIME
如果日期以CONVERT(VARCHAR(10), the_date, 103)
类型提供,您只想删除时间部分并再次将结果返回DATETIME
,则可以执行
DATETIME
请注意,此处不涉及日期格式,因为日期永远不会显示为文本。
答案 2 :(得分:0)
这有点令人困惑,因为无论数据类型如何,您都会得到与CONVERT
相同的答案。我将用2个声明的变量,1个datetime数据类型,另一个date数据类型来说明这一点:
DECLARE @mydatetime datetime = '1990-01-01 00:00:00.000'
DECLARE @mydate date = '1900-01-01'
SELECT convert(varchar,@mydatetime, 103) as mydatetime
SELECT convert(varchar,@mydate, 103) as mydate
产地:
mydatetime
01/01/1990
mydate
01/01/1900
所以你不需要投射到目前为止,然后是103格式。
如果您不喜欢表格中的日期时间(日期时间),那么您始终可以将表格中的列更改为日期数据类型。这可以使用SSMS完成,也可以执行SQL:
ALTER TABLE mytable ALTER COLUMN mycolumn DATE
其中DATE
是新数据类型。然后只有日期存储在表格中。
答案 3 :(得分:0)
感谢您的所有答案,但对于拥有相同查询的任何人,我都可以从这里获得解决方案 solution