我在SQL表Beg_date
和End_date
中有两个日期,包括Employee-ID
。
需要传递两个参数@Month
和@Year
,以确定@Month
和@Year
是否介于Beg_date
和End_date
之间。< / p>
示例:
传递值@Month = '11'
和@Year = '2014'
表格数据:Beg_date = '10/1/2013'
和End_date = '12/31/2014'
由于@Month
和@Year
都来自上述日期,因此应显示Employee-ID
。
现在,如果将值@Month = '11'
和@Year = '2012'
传递给上述表日期,则不应显示数据。
另一件事是,Employee在同一个表中有多个记录,其中Beg_date
和End_date
不同;脚本应该在给出结果之前搜索所有记录
示例:
Employee-ID Beg_date End_date
-----------------------------------------
0001 01/01/2013 11/30/2013
0001 12/01/2013 11/30/2014
0001 12/01/2014 11/30/2015
请告知......
答案 0 :(得分:0)
下面的查询应该适用于MS SQL 2005环境问题中描述的问题。该解决方案主要基于使用CONVERT
函数的数据类型转换:
SELECT
*
FROM
tab
WHERE
CONVERT(DATETIME,
LTRIM(RTRIM(CONVERT(NVARCHAR(10), @Year)))
+ '-' + RIGHT('0' + LTRIM(RTRIM(CONVERT(NVARCHAR(10), @Month))), 2)
+ '-01', 120)
>= CONVERT(DATETIME,
LTRIM(RTRIM(CONVERT(NVARCHAR(10), YEAR(Beg_date))))
+ '-' + RIGHT('0' + LTRIM(RTRIM(CONVERT(NVARCHAR(10), MONTH(Beg_date)))), 2)
+ '-01', 120)
AND
CONVERT(DATETIME,
LTRIM(RTRIM(CONVERT(NVARCHAR(10), @Year)))
+ '-' + RIGHT('0' + LTRIM(RTRIM(CONVERT(NVARCHAR(10), @Month))), 2)
+ '-01', 120)
<= CONVERT(DATETIME,
LTRIM(RTRIM(CONVERT(NVARCHAR(10), YEAR(End_date))))
+ '-' + RIGHT('0' + LTRIM(RTRIM(CONVERT(NVARCHAR(10), MONTH(End_date)))), 2)
+ '-01', 120)
它为给定参数DATETIME
和@Year
以及@Month
,Beg_date
建立有效End_date
。从您的示例中获取的WHERE
中的示例值将是:
@Year
,@Month
: 2014-11-01 00:00:00
Beg_date
: 2013-12-01 00:00:00
End_date
: 2014-11-30 00:00:00
将满足条件。
您可以在 SQL Fiddle 上找到一个有效的例子。它是为MSSQL 2008(那里最早的可用版本)完成的,但语法和函数也适用于MSSQL 2005。
我希望它可以帮助你。
此答案的先前版本基于我的(错误的)假设 您使用MySQL数据库。
答案 1 :(得分:0)
可以使用DATEFROMPARTS
函数轻松完成:
DECLARE @Month INT = 9
DECLARE @Year INT = 2014
DECLARE @ResultDate DATE
DECLARE @t TABLE
(
[Employee-ID] CHAR(4) ,
Beg_date DATETIME ,
END_date DATETIME
)
SET @ResultDate = CAST(CAST(@Year AS NVARCHAR(MAX)) + REPLICATE('0', 2 - LEN(CAST(@Month AS NVARCHAR(MAX)))) + CAST(@Month AS NVARCHAR(MAX)) + '01' AS DATE)
INSERT INTO @t
VALUES ( '0001', '20130101', '20131130' ),
( '0002', '20130112', '20141130' ),
( '0003', '20140112', '20151130' )
SELECT *
FROM @t
WHERE @ResultDate BETWEEN Beg_date AND END_date
输出:
Employee-ID Beg_date END_date
0002 2013-01-12 2014-11-30
0003 2014-01-12 2015-11-30