在sql server中编写一个函数

时间:2011-09-09 20:04:33

标签: sql sql-server-2008

我编写了一个将字符串转换为datetime的函数。所以,这就是我做的事情

   CREATE FUNCTION formatit(
      @fromtime VARCHAR(50) -- varchar
       )
    RETURNS DATETIME
    AS 
    BEGIN 
    DECLARE @from varchar(50)
    DECLARE @value
      IF (CHARINDEX('NOON',@fromtime,0)) = 0 THEN

       SET @from = CONVERT(DATETIME, @fromtime) 
     ELSE
       SET @from =CONVERT(DATETIME, '01/01/2000 12pm') 
    RETURN(@from)
    END

 SELECT dbo.formatit('04/12/2011 NOON ')

所以,你可以看到,如果fromtime包含单词NOON我正在尝试使用默认日期。但是我收到了一个错误'从字符串转换日期时转换失败。'

当我进入任何时间如下午4点时它工作正常但在我中午时失败。请你知道我能处理的方式吗?

3 个答案:

答案 0 :(得分:1)

enter image description here

这是有效的

 declare @from datetime

 SET @from =CONVERT(DATETIME, '01/01/2000 12:00 pm') 

以下测试。

  CREATE FUNCTION formatit(
      @fromtime VARCHAR(50) -- varchar
       )
    RETURNS DATETIME
    AS 
    BEGIN 
    DECLARE @from datetime
     IF (CHARINDEX('NOON',@fromtime,0)) = 0 
       SET @from = CONVERT(DATETIME, @fromtime) 
     ELSE
       SET @from =CONVERT(DATETIME, '01/01/2000 12pm') 
    RETURN(@from)
    END

 SELECT dbo.formatit('04/12/2011 NOON ')

答案 1 :(得分:1)

我认为您需要在12之后添加分钟,并在时间和上午/下午之间留出空格。见下文:

SET @from = CONVERT(DATETIME, '01/01/2000 12:00 PM')

答案 2 :(得分:1)

@from被声明为varchar,您将返回日期时间