现在碰到一个SQL的问题,向各位求助。 我在SQL Server 里面定义了一个函数,如下:
create  function dbo.fn_getdatetimenows()  returns datetime
as
begin
declare @datetimenows datetime
select  @datetimenows = dbo.GETDATE()
return  @datetimenows 
end 然后,在查询分析器里面,使用
“SELECT [EF2KWeb01].[dbo].[fn_getdatetimenows]()”
来调用这个函数,但总是报错,报错内容如下:
“服务器: 消息 208,级别 16,状态 1,过程 fn_getdatetimenows,行 7
对象名 'dbo.GETDATE' 无效。” 这里的第7行,也就指的是return语句的那一行。 在定义函数的时候,如果不加dbo,函数定义就会出错,加了dbo,调用的时候出错。
这个dbo到底是什么东西,起什么作用?我把它改成sa一样的出错。(我登录SQLServer是用的sa用户名) 另外,我要取当前系统时间前两天的日期,怎么取呢?
比如,现在的系统时间是“2006-06-19 13:10:10 AM”,我想要的值是‘20060617’,8位字符串型的,
有没有比较方便的转换方式呢?因为对系统函数不是特别熟悉,我这里转换的非常麻烦。

解决方案 »

  1.   

    1.在自定義函數中不能調用GETDATE函數,可以改成用視圖的方法
    Create View List
    As
    Select GetDate() As datetimenows
    GO
    create function dbo.fn_getdatetimenows()  returns datetime
    as
    begin
    declare @datetimenows datetime
    select  @datetimenows = datetimenows From List
    return  @datetimenows 
    end
    GO
    --調用函數(調用函數時必須加上所有者,此處的dbo即為所有者)
    Select dbo.fn_getdatetimenows()
    2.现在的系统时间是“2006-06-19 13:10:10 AM”,我想要的值是‘20060617’,8位字符串型的
    兩個函數
    DateAdd ConvertSelect Convert(Varchar,DateAdd(dd,-2,GetDate()),112)
    --Result
    20060620
      

  2.   

    用户定义函数中不允许使用会对每个调用返回不同数据的内置函数。如newid(),getdate()等.联机查"函数"->"用户定义",可以有详细帮助说明
      

  3.   

    1.getdate()是系统函数,不用带dbo
      

  4.   

    2.自定义函数前要加上dbo,
    3.取前两天日期select convert(char(18),dateadd(dd,-2,getdate()),112)
      

  5.   

    在自定义函数中引用不确定值函数的办法就是paoluo(一天到晚游泳的鱼)提供的方法,把不确定值函数封装到VIEW中.
      

  6.   

    楼主,日期的格式,可以参考CONVERT函数,可以达到你要的现实效果