更改字符串格式时的过程出错

时间:2018-04-27 06:41:37

标签: sql-server-2008 tsql

我有一个接受字符串作为格式为dd/mm/yyyy的输入的过程但我需要从另一个应用程序调用此过程,我不得不给出格式yyyy-mm-dd

所以我已经提取并将字符串更改为dd/mm/yyyy,但该过程会导致错误的语法错误。

所需格式:dd/mm/yyyy,例如'11/04/2018'

输入格式:yyyy-mm-dd例如'2018-04-11'

所以我的程序将是

所需格式为abcdprocedure('11/04/2018')

我的公式

abcdprocedure(SUBSTRING('2018-04-11',9,2)+'/'+SUBSTRING('2018-04-11',6,2)+'/'+SUBSTRING('2018-04-11',1,4))

错误:“2018-04-11”

附近的语法错误

我无法理解这个问题。

修改

以下方式调用程序:

select * from abcdprocedure('11/04/2018')

3 个答案:

答案 0 :(得分:2)

在T-SQL中执行存储过程时,可以为每个参数提供变量DEFAULT。您可以提供任意表达式

将表达式移到一个单独的行中,该行将结果放入变量中,并在调用存储过程时使用

(另外,请认真考虑,请在此重新考虑您对字符串的使用.T-SQL具有非常好的日期时间相关数据类型,设计以保存datetime。只有格式问题,因为您正在使用字符串)

修改

  

以下面的方式调用Procdure:

select * from abcdprocedure('11/04/2018')
嗯,不。如果那行代码有效,那么我们所说的是而不是 T-SQL调用存储过程的内容。存储过程是独立的代码块,无法集成到更大的查询中。同样,如果这有效,请确定abcdprocedure实际(表值函数?)并更新您的问题。

答案 1 :(得分:1)

文件说 -

  

表值函数返回单个行集(与存储不同)   过程,可以返回多个结果形状)。因为   表值函数的返回类型是Table,可以使用a   SQL中任何位置的表值函数,您可以使用表。您   也可以像处理表一样处理表值函数。

首先,您应该检查功能' abcdprocedure' 您可以在变量中存储从yyyy-mm-dd到dd / mm / yyyy的转换

 Declare @v_date date;
    @v_date=SELECT CONCAT( SUBSTRING('2018-04-11',9,2),'/',SUBSTRING('2018-04-11',6,2),'/',SUBSTRING('2018-04-11',1,4));

然后你可以把你的桌子称为funcyion

select * from abcdprocedure(@v_date)

答案 2 :(得分:0)

    you can use below query for this 

    SELECT CONCAT( SUBSTRING('2018-04-11',9,2),'/',SUBSTRING('2018-04-11',6,2),'/',SUBSTRING('2018-04-11',1,4));

    It will work in mysql and sql server both.

OR 

 SELECT (SUBSTRING('2018-04-11',9,2)+'/'+SUBSTRING('2018-04-11',6,2)+'/'+SUBSTRING('2018-04-11',1,4))

**OUTPUT:**
11/04/2018