sql - 日期不是指定的格式

时间:2016-01-13 06:49:22

标签: sql sql-server date select

我搜索了一下,看不出有任何问题要回答我的问题,所以就这样了。

我正在尝试从数据库中获取日期(来源是日期时间格式,即" 2015-11-30 00:00:00.000")并选择它作为日期,但是采用其他格式。在" googleing"之后我正在使用转换功能。首先,我将目标格式设置为varchar:

Select
convert(varchar(10),ac_payout_book_dt,104) as 'Dato'

结果是日期格式正确,即" 30.11.2015"

然后我需要在自动化脚本时对其进行排序,以便能够使用

ORDER BY Dato DESC

...我将查询更改为...

Select    
convert(date,ac_payout_book_dt,104) as 'Dato'

现在结果格式错误,即" 2015-11-30"

在互联网上几轮之后我也试了一下没有运气

CAST(convert(date,ac_payout_book_dt,104) AS DATE) as 'Dato'

任何可以帮助我弄清楚我走错路的人吗?

BR 安德烈亚斯

3 个答案:

答案 0 :(得分:3)

好吧,如果你使用

Select
    convert(varchar(10),ac_payout_book_dt,104) as 'Dato'

然后将DateTime(SQL Server内部没有格式 - 它是一个8字节的二进制值)转换为字符串 - 您可以控制日期格式化为字符串的方式。

为了对你的输出进行排序,你需要一个日期(没有时间,我猜) - 没问题,但是你做的时候

Select    
    convert(date, ac_payout_book_dt, 104) as 'Dato'

您正在将DateTime转换为Date(在SQL Server 中再次 无格式 - 它只是一个3字节bianry value) - 所以样式“104”在这里没用 - 你将一个二进制值转换为另一个二进制值 - 日期将以默认的SQL Server日期格式显示。

由于这实际上是二进制到二进制的转换,没有涉及字符串格式化,我更喜欢使用

SELECT CAST(ac_payout_book_dt AS DATE) AS 'Dato' 

因为提供一种无法使用的风格真的没有意义。

所以,你需要注意的是:

  • 您使用DATEDATETIME进行排序还是日期算术?在这种情况下,您必须使用本机数据类型 - 不要对日期的字符串表示进行日期数学运算!

  • 您想输出您的DATEDATETIME到屏幕上吗?然后,您需要使用CONVERTFORMAT将其转换为字符串并提供正确的样式/日期格式字符串

总的来说,在不知道整个查询的情况下 - 你可能想要做这样的事情:

SELECT 
    CONVERT(VARCHAR(10), ac_payout_book_dt, 104) as 'Dato',
    ..... (other columns) .....
FROM
    dbo.YourTable
WHERE 
    .... (some condition) ....
ORDER BY
    CAST(ac_payout_book_dt AS DATE) DESC

或许您想要查看SQL Server 2012 上提供的FORMAT,这样可以更灵活地格式化日期:

SELECT
    FORMAT(ac_payout_book_at, 'dd.MM.yyyy', 'de-de')

答案 1 :(得分:3)

我想您应该尝试这样做,订购CAST日期,这样您就可以执行所需的操作,并且您也可以获得所需的日期格式。

SELECT 
    CONVERT(VARCHAR(10), ac_payout_book_dt, 104) as 'Dato'
ORDER BY
    CAST(ac_payout_book_dt AS DATE) DESC

答案 2 :(得分:0)

排序时将'Deto'转换为'date'格式。 像这样的东西 -     ORDER BY CONVERT(DATE,Deto,104)DESC