-2

これは、私が試みた最も紛らわしい関数の 1 つです。ロジックは select ステートメント内で機能しますが、ユーザー定義関数を作成できないようです。

エラーは次のとおりです。

「SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、checkdate1 行目の「delimiter$$ create function ( p_datetimestamp varchar (6) ) return 」の近くで使用する正しい構文を確認してください。

コードは次のとおりです: (テキスト文字列 'yymmdd' を日付形式に変更します。'100810' は、ロジックに従って 2010-09-01 になります。)

delimiter$$
create function `checkdate` (
 p_datetimestamp varchar (6)
 )
 returns date

begin
declare ret_val date;
set ret_val = 
   str_to_date(
 concat(
  /*Assign Year -> %y*/
    if(
    mid(p_datetimestamp,3,2) = '12',
    (left(p_datetimestamp,2) + 1),
    left(p_datetimestamp,2)
    ),
  /*Assign Month -> %m*/
    if(
    (mid(p_datetimestamp,3,2) >= '01' and mid(p_datetimestamp,3,2) <= '11'),
    concat('0', (mid(p_datetimestamp,3,2) + 1)), '01'
    ),
  /*Assign Date -> %d*/
    if(
    (mid(p_datetimestamp,5,2) >= '01' and mid(p_datetimestamp,5,2) <= '16'), '01', '17'
    ),
 ), 
    '%y%m%d');
return ret_val;
end$$
4

1 に答える 1

0

最後に不正なコンマ

DELIMITER $$

create function `checkdate` (
 p_datetimestamp varchar (6)
 )
 returns date

begin
declare ret_val date;
set ret_val = 
   str_to_date(
 concat(
  /*Assign Year -> %y*/
    if(
    mid(p_datetimestamp,3,2) = '12',
    (left(p_datetimestamp,2) + 1),
    left(p_datetimestamp,2)
    ),
  /*Assign Month -> %m*/
    if(
    (mid(p_datetimestamp,3,2) >= '01' and mid(p_datetimestamp,3,2) <= '11'),
    concat('0', (mid(p_datetimestamp,3,2) + 1)), '01'
    ),
  /*Assign Date -> %d*/
    if(
    (mid(p_datetimestamp,5,2) >= '01' and mid(p_datetimestamp,5,2) <= '16'), '01', '17'
    ) /*<-- Comma Removed from Here*/
 ), 
    '%y%m%d');
return ret_val;
end$$
于 2010-08-18T21:18:26.170 に答える