首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DATEPART作为参数

DATEPART作为参数
EN

Stack Overflow用户
提问于 2010-10-15 23:38:09
回答 5查看 12.8K关注 0票数 13

我猜这是不可能的,因为引擎不喜欢它,但是有没有办法(动态SQL除外)将DATEPART作为参数传递给过程?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-15 23:54:36

一种选择是使用带有参数的CASE (最好使用int枚举而不是string):

代码语言:javascript
复制
declare @part varchar(10)
set @part = 'YEAR'
select case @part 
            when 'YEAR' then datepart(yy, SomeDateTimeColumn) 
            when 'MONTH' then datepart(mm, SomeDateTimeColumn) 
            else datepart(dd, SomeDateTimeColumn) 
        end
from SomeTable
票数 12
EN

Stack Overflow用户

发布于 2010-10-15 23:52:40

不是的。没有"year“数据类型。您可以这样做:

代码语言:javascript
复制
CREATE PROC myproc @Year int, @Month tinyint

此操作失败,因为DATEPART部分是文本

代码语言:javascript
复制
DECLARE @part varchar(10)
SET @part = 'month'
SELECT DATEPART(@part, GETDATE());

或者这个和一个IF

代码语言:javascript
复制
CREATE PROC myproc @WhoeDate datetime, @part varchar(10) /* year. month etc*/
票数 2
EN

Stack Overflow用户

发布于 2010-10-15 23:43:06

为什么不能直接传入从Datepart创建的日期呢?

代码语言:javascript
复制
DECLARE @datepart DATETIME
SET @datepart = DATEPART(yyyy, GetDate())

exec spName @datepart
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3943775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档