我有一个接受字符串作为格式为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')
答案 0 :(得分:2)
在T-SQL中执行存储过程时,可以为每个参数提供值,变量或DEFAULT
。您可以不提供任意表达式。
将表达式移到一个单独的行中,该行将结果放入变量中,并在调用存储过程时使用 。
(另外,请认真考虑,请在此重新考虑您对字符串的使用.T-SQL具有非常好的日期时间相关数据类型,设计以保存datetime
。只有有格式问题,因为您正在使用字符串)
修改
嗯,不。如果那行代码有效,那么我们所说的是而不是 T-SQL调用存储过程的内容。存储过程是独立的代码块,无法集成到更大的查询中。同样,如果这有效,请确定以下面的方式调用Procdure:
select * from abcdprocedure('11/04/2018')
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