【问题标题】:sql - date not in format specifiedsql - 日期不是指定的格式
【发布时间】:2016-04-18 00:55:38
【问题描述】:

我搜索了一下,没有看到任何可以回答我的问题的问题,所以就这样吧。

我正在尝试从数据库中获取日期(来源为日期时间格式,即“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 安德烈亚斯

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或其他完全不同的东西。
  • 抱歉,现在将 SQL Server 添加到标签中。 2014 年运行。

标签: sql sql-server date select


【解决方案1】:

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

【讨论】:

  • 您正在将 DATETIME 转换为 DATE - 两者都是 二进制 - 这不起作用,您需要转换为 STRING 当你想应用一个样式时 (104)
【解决方案2】:

我想你应该试试这个,用CAST日期订购,这样你就可以执行你想要的操作,你也可以得到你想要的日期格式。

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

【讨论】:

    【解决方案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 字节的二进制值) -所以样式“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')
    

    【讨论】:

    • 谢谢你,marc_s。真正有用的反馈。我似乎忽略了日期和日期时间的基本事实。对此感到抱歉。你的回答给了我很大的帮助。
    • @Andreasp:很高兴我能提供帮助!我们每天都在生活和学习 :-) 我们所有人......
    • @marc_s 你解释得很好。干得好,我从中知道了一些事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2012-12-13
    相关资源
    最近更新 更多