我有一个包含salaryMonth
字段的表格,其中包含月份和年份[" 04/2017"]字符串。我想在我使用以下查询的特定时间跨度之间获取数据但是它们失败并且给我错误无法从字符串转换日期或时间。
SELECT salaryMonth FROM viewSalary WHERE (CONVERT(date, '1/' + salaryMonth) > '2/22/2017')
也
SELECT salaryMonth FROM viewSalary WHERE (CONVERT(date, '1/' + salaryMonth) >= CONVERT(date, '2/22/2017'))
我也交换了月和日的部分,但仍然没有运气。
答案 0 :(得分:2)
试试这个:
SELECT salaryMonth
FROM viewSalary
WHERE (CONVERT(date, '01/' + salaryMonth, 103) >= CONVERT(date, '02/22/2017', 103)
答案 1 :(得分:1)
根据@ ATC的回答,TSQL允许您在转换为/来自日期时间时指定样式。这是转换语句中最后一个参数中的101
CONVERT(date, '01/' + salaryMonth, 101)
有关可用格式的完整列表,请参阅https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql
在你的情况下,对于dd / MM / yyyy,我相信代码是103
CONVERT(date, '01/' + salaryMonth, 103)
答案 2 :(得分:0)
我认为你可以这样做:
SELECT salaryMonth FROM viewSalary
WHERE CAST('01/'+salaryMonth AS date) > CAST('2/22/2017' AS DATE)
答案 3 :(得分:0)
这是您将值转换为有效SQL日期所需的基本SQL,格式为:YYYY-MM-DD
:
DECLARE @datestring AS NVARCHAR(10) = '04/2017';
SELECT CAST(RIGHT(@datestring, 4) + '-' +
LEFT(@datestring, 2) + '-01' AS DATE) AS DateVal;
-- produces: 2017-04-01
添加到您的SQL:
SELECT salaryMonth
FROM viewSalary
WHERE CAST(RIGHT(salaryMonth , 4) + '-' +
LEFT(salaryMonth , 2) + '-01' AS DATE) > '2017-02-22'
答案 4 :(得分:0)
在sql server 2012+中,你可以像这样使用datefromparts
SELECT salaryMonth
FROM viewSalary
WHERE datefromparts(RIGHT(salaryMonth,4), LEFT(salaryMonth,2),1) >= Datefromparts(2017,2,22)