SQL Server存储过程之间的语句

时间:2012-02-15 16:08:37

标签: sql-server stored-procedures

我想从表中选择日期与

之间

但问题是在数据库中没有datetime列,有分隔的dateTime年,月和日

是否有可能在存储过程中创建类似的新变量?

checkin = new DateTime(年,月,日)

今年的月和日是数据表中的列

3 个答案:

答案 0 :(得分:3)

您可以使用以下函数将字符串转换为DateTime:

convert(datetime, '02/15/2012', 101) -- mm/dd/yyyy

答案 1 :(得分:2)

您可以尝试以下方式:

-- dateadd formula borrowed from
-- http://weblogs.sqlteam.com/jeffs/archive/2007/01/02/56079.aspx

with includeDate as (
    select column1,
           column2,
           column3,
           dateadd(month,(([year]-1900)*12)+[month]-1,[day]-1) as date
    from yourTable
)
select * 
from includeDate
where date between @startDate and @endDate

答案 2 :(得分:1)

当然,在您的存储过程中,您将使用表中的值填充查询,下面的代码是将单独的日期字段转换为一个日期时间值的示例。

我不知道您的日,月和年字段的数据类型,但如果您有一个int值,则以下内容应该有效:

declare @day int
declare @month int
declare @year int
declare @fulldate smalldatetime

set @day = '1'
set @month = '9'
set @year = '2012'

SELECT @fulldate = Convert(smalldatetime, Cast(@month as varchar(2)) + '/' 
    + Cast(@day as varchar(2)) + '/' + Cast(@year as varchar(4)), 101)

select Convert(varchar(10), @fulldate, 101)

如果值存储为字符串:

declare @day varchar(2)
declare @month varchar(2)
declare @year varchar(4)
declare @fulldate smalldatetime

set @day = '1'
set @month = '9'
set @year = '2012'

SELECT @fulldate = Convert(smalldatetime, @month + '/' 
    + @day + '/' + @year, 101)

select Convert(varchar(10), @fulldate, 101)