【发布时间】:2012-02-15 16:08:36
【问题描述】:
我想从日期之间的表格中选择
但问题是在数据库中没有 datetime 列,dateTime 年、月和日是分开的
是否可以在类似的存储过程中创建新变量?
checkin = new DateTime(年、月、日)
今年的月份和日期是数据表中的列
【问题讨论】:
-
日月年的数据类型是什么?
标签: sql-server stored-procedures
我想从日期之间的表格中选择
但问题是在数据库中没有 datetime 列,dateTime 年、月和日是分开的
是否可以在类似的存储过程中创建新变量?
checkin = new DateTime(年、月、日)
今年的月份和日期是数据表中的列
【问题讨论】:
标签: sql-server stored-procedures
您可以使用以下函数将字符串转换为日期时间:
convert(datetime, '02/15/2012', 101) -- mm/dd/yyyy
【讨论】:
你可以试试这样的:
-- 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
【讨论】:
当然,在您的存储过程中,您将使用表中的值填充查询,下面的代码是将单独的日期字段转换为一个日期时间值的示例。
我不知道你的日、月和年字段的数据类型,但如果你有一个 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)
【讨论】: