我进行了一个查询,以获取在2个日期之间放入数据库的MS SQL中的所有数据。
SELECT convert(varchar(30), [date], 113) as "Date"
FROM [I3_IC].[dbo].[Be]
Where [date] >= '2017-03-13T00:00:00.000' AND [date] <= '2017-03-19T00:00:00.000'
输出将是:2017年3月13日10:40:13:017
我希望它是:13-03-2017 10:40
我有什么想法可以做到这一点?
答案 0 :(得分:3)
您可以使用FORMAT
:
SELECT FORMAT(GETDATE(),'dd-MM-yyyy hh:mm') as [Date]
FROM [I3_IC].[dbo].[Be]
WHERE [date] >= '2017-03-13T00:00:00.000'
AND [date] <= '2017-03-19T00:00:00.000';
顺便说一句,您需要注意选择日期范围时使用的条件(<= '2017-03-19T00:00:00.000'
实际上会选择'2017-03-19T00:00:00.000'
,这是您想要的吗?)
答案 1 :(得分:0)
在sql server 2012之前,连接两个convert()
styles
select convert(char(10),getdate(),105)+' '+convert(char(5),getdate(),108)
返回:24-03-2017 16:05
在sql server 2012+中,您可以使用format()
,如Lamak的答案。
select format(getdate(),'dd-MM-yyyy HH:mm')
返回:24-03-2017 16:05
但format()
可能会慢一点,请看一下:format()
is nice and all, but… - Aaron Bertand
在对我的系统进行快速测试时,连接convert()
比format()
快得多(除非选择按无格式值排序的前1名)。
+---------+--------------------+------------------+-------------------+-----------------+----------------+----------------------------------------------------------------------------------------------------------------+
| func | total_elapsed_time | avg_elapsed_time | total_worker_time | avg_worker_time | total_clr_time | t |
+---------+--------------------+------------------+-------------------+-----------------+----------------+----------------------------------------------------------------------------------------------------------------+
| convert | 7000 | 1400.00 | 7000 | 1400.00 | 0 | DECLARE @d CHAR(10);SELECT @d = convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d; |
| format | 135000 | 27000.00 | 135000 | 27000.00 | 128000 | DECLARE @d CHAR(10);SELECT @d = format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d; |
| convert | 14000 | 2800.00 | 14000 | 2800.00 | 0 | SELECT d = convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d; |
| format | 143000 | 28600.00 | 143000 | 28600.00 | 123000 | SELECT d = format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d; |
| convert | 1000 | 200.00 | 1000 | 200.00 | 0 | SELECT TOP (1) convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d; |
| format | 1000 | 200.00 | 1000 | 200.00 | 1000 | SELECT TOP (1) format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d; |
| convert | 4000 | 800.00 | 4000 | 800.00 | 0 | DECLARE @d CHAR(16);SELECT @d = convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d; |
| format | 105000 | 21000.00 | 105000 | 21000.00 | 95000 | DECLARE @d CHAR(16);SELECT @d = format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d; |
+---------+--------------------+------------------+-------------------+-----------------+----------------+----------------------------------------------------------------------------------------------------------------+
该测试是Aaron Bertrand撰写的测试脚本的修改。修改后的版本位于pastebin, here.