语句之间的 SQL server 存储过程

Posted

技术标签:

【中文标题】语句之间的 SQL server 存储过程【英文标题】:SQL server stored procedure between statement 【发布时间】:2012-02-15 16:08:36 【问题描述】:

我想从日期之间的表格中选择

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

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

checkin = new DateTime(年、月、日)

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

【问题讨论】:

另见***.com/questions/1923876/… 日月年的数据类型是什么? 【参考方案1】:

您可以使用以下函数将字符串转换为日期时间:

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

【讨论】:

如果你这样做,它会更容易扩展,并且对于未来的开发人员来说代码中发生的事情会更明显。因此,如果/当您想将 hr:mi 添加到系统中时,您可以。【参考方案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

【讨论】:

【参考方案3】:

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

我不知道你的日、月和年字段的数据类型,但如果你有一个 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)

【讨论】:

以上是关于语句之间的 SQL server 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

sql server中怎样创建保存数据的存储过程

在SQL Server2005中,下面调用存储过程的语句错误的是:

SQL Server 存储过程

求 存储过程和Sql语句之间的区别 余额准确越好

SQL Server 存储过程

SQL Server 存储过程