我搜索了一下,看不出有任何问题要回答我的问题,所以就这样了。
我正在尝试从数据库中获取日期(来源是日期时间格式,即" 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 安德烈亚斯
答案 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'
因为提供一种无法使用的风格真的没有意义。
所以,你需要注意的是:
您使用DATE
或DATETIME
进行排序还是日期算术?在这种情况下,您必须使用本机数据类型 - 不要对日期的字符串表示进行日期数学运算!
您想输出您的DATE
或DATETIME
到屏幕上吗?然后,您需要使用CONVERT
或FORMAT
将其转换为字符串并提供正确的样式/日期格式字符串
总的来说,在不知道整个查询的情况下 - 你可能想要做这样的事情:
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