Ошибка в процедуре при изменении формата строки - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть процедура, которая принимает строку в качестве ввода в формате 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 голосов
/ 27 апреля 2018
    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
0 голосов
/ 27 апреля 2018

Документация гласит -

Табличная функция возвращает один набор строк (в отличие от сохраненных процедуры, которые могут возвращать несколько результирующих фигур). Поскольку тип возвращаемой табличной функции - Table, вы можете использовать табличная функция в любом месте SQL, которую вы можете использовать в таблице. Вы также может обрабатывать табличную функцию так же, как и таблицу.

Прежде всего вы должны проверить функцию 'abcdprocedure' Вы можете сохранить ваше преобразование из гггг-мм-дд в дд / мм / гггг в переменную

 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)
0 голосов
/ 27 апреля 2018

Когда вы выполняете хранимую процедуру в T-SQL, вы можете указать значение , переменную или DEFAULT для каждого параметра. Вы можете не предоставить произвольное выражение .

Переместите ваше выражение в отдельную строку, которая помещает результат в переменную, и используйте , который при вызове хранимой процедуры.

(Кроме того, серьезно, пожалуйста, пересмотрите ваше использование строк здесь. T-SQL имеет очень хорошие типы данных, связанных с датой и временем, которые предназначены для хранения datetime с. У вас только есть проблемы с форматированием, потому что вы работаете со строками)


EDIT

Процедура вызывается следующим образом:

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

Хм, нет. Если эта строка кода работает, то мы говорим о , а не , что T-SQL называет хранимой процедурой. Хранимые процедуры представляют собой отдельные блоки кода и не могут быть интегрированы в более крупные запросы. Опять же, если это работает, пожалуйста, определите, что abcdprocedure на самом деле является (табличная функция?), И обновите свой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...