dポイントプレゼントキャンペーン実施中!

日付をDBから取り出す際、

9999-99-99 99:99:99
↑を取り出すのは
AND substr(dat_sales.date,1,4)="2023"
AND substr(dat_sales.date,6,2)="02"
AND substr(dat_sales.date,9,2)="15"
と記述すると本に載っており実際、この記述でデータを取り出せました。
が、取り出す文字の数え方が疑問です。
最初の頭の数は1ではなく0ではないのでしょうか?

substr('abcde', 0, 2) --> ab
の様にaが0から始まると思うのですが今回のですと
substr(dat_sales.date,1,4)だと
999-が取り出されると思ったのですが。
何故、上手く日付が取り出せたのでしょうか?
教えて下さい。

質問者からの補足コメント

  • はい。カラムの間違えがあり、その旨を教えて頂き正常に動きました。
    今回、substr自体の使い方が疑問だったので質問をしました。

    例えば何ですが、
    2023-02-15 99:99:99 という日付のデータを取り出したい場合、
    2023は左から0123と数えるのではないかと疑問に思いました。

    2023は左から1234と1から始まるのでしょうか?だとすると、
    2023-02-15は1234が2023で-02が56となるのでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/02/17 16:19

A 回答 (4件)

こんにちは



SQLですよね?

PHPのカテでご質問なさっているので、PHPと混同していませんか?

SQLでは先頭の文字位置は「1」です。
(0を指定した場合、1として処理されます)
https://itsakura.com/oracle-substr
https://docs.oracle.com/cd/E16338_01/server.112/ …
    • good
    • 0
この回答へのお礼

ありがとうございます!
すみません、質問するカテを間違えていました。
SQLでは頭が1になるのですね。
助かりました。
ずっと考えていたので教えて頂けて本当に嬉しいです。
ありがとうございました!

お礼日時:2023/02/17 16:55

環境や言語系によって関数のパラメータ解釈に差があるのかもしれません



そもそもこの話題は、どの環境での話でしょうか?
カテゴリからPHP上ということでしょうか?

こちらのPHPマニュアルを参照すると
https://www.php.net/manual/ja/function.substr.php
offset値は、0~とい事になっていますね

とは言え、実機では1~ということなのであれば
そういう環境だと解釈してくしか無いのでは?

仮に0を指定した場合にはどういう結果が得られるのかで仕様を推定できそうですね
    • good
    • 0
この回答へのお礼

ありがとうございます。
環境など色々な観点から教えて頂き助かりました。
一人ではなかなか解決出来なく参ります。

お礼日時:2023/02/17 16:56

列名がdateでなく、dataだったのですよね?

この回答への補足あり
    • good
    • 0

>の様にaが0から始まると思う


なんでそう思ったのですか?
別の文字列の取り出しなら、0からになった、、、など
異なる実例が発生したんですか?

してないなら、単なるあなたの思い込みでしょ?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!