オラクルでsysdateをとろうとすると、現在わたしの使っている実装ではselect sysdate from DUALに対し、例えば
2006/03/24 18:13:42 が
返されます。
しかしsysdateを関数の中で使うと最初の"20"と時分秒がなくなり、06-03-24のような値が返されます。例えば以下のようなSQLにおいてです。
select translate(sysdate,'1234567890-','1234567890-') from DUAL;
select substr(sysdate,1) from DUAL;
sysdateのフォーマットが、使い方によって変わるのはなぜなのでしょうか。
No.2ベストアンサー
- 回答日時:
>select translate(sysdate,'1234567890-','1234567890-') from DUAL;
>select substr(sysdate,1) from DUAL;
これらのSQLでのSYSDATEは、関数のパラメータになっていますが、
関数は、VARCHAR2/CHAR属性のパラメータを想定しています。
なので、オラクルは、暗黙に"TO_CHAR(SYSDAE)"を実行しています。
で、TO_CHARでの日付書式がデフォルト値になるので、NLSパラメータに
左右されて、yy-mm-ddな扱いになります。
今回のように、SQL文の中での日付書式に関しては、クライアントのNLSでなく
サーバサイドの環境によって決まるはずですので、そちらを確認してください。
出来ることなら、日付書式のデフォルトに左右されないよう明示的な型変換(TO_CHAR)を
使うのが好ましいと思います。
ありがとうございます。関数のパラメーターのデータ型から追求していけばよかったなあと思いました。
select to_char(sysdate) from DUAL; を実行して確認してみました。
どうしてもyyyy/mm/ddフォーマットでINSERTしなければならないデータだったので、to_char関数を使用後に、translateとconcatenateを使って対応することにしました。
No.1
- 回答日時:
クライアント側でNLS_DATE_FORMAT 環境変数を設定していませんか?
日付のフォーマットは接続クライアントの役割で
NLS_DATE_FORMATまたはNLS_TERRITORYによって変化します。
データベースサーバ自身も接続クライアントですから
デフォルトのNLS_DATE_FORMATを暗黙変換で使用します。
クライアントの NLS_DATE_FORMAT とサーバの NLS_DATE_FORMAT が異なっているからでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server SQLについて質問です。 日付値の計算の練習で、dual表を用いて、 今日の日付、誕生日、生まれてか 1 2022/05/13 20:42
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- MySQL SQLについて質問です。 SELECT TO_CHAR(TO_DATE('90-10-08.'YY- 4 2022/05/13 20:55
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Oracle SQL update方法 2 2022/06/22 14:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
エクセル 日付による並べ替え...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
指定した年月までのデータを取...
-
エクセルのヘッダーを変数で指...
-
PLSQL CHARの項目を使用した計算
-
日付書式に変換でこまっています!
-
LogParserを使用した前日分のイ...
-
oracle 文字列 01:45 を時間に...
-
Excelグラフの日付軸の日付がず...
-
日付の切り出し方法について
-
特定の日付が第何週目にあるか...
-
23時59分59秒までのデータを抽...
-
OSのシステム日付を変更して...
-
【VBA】「時間+日付.xls」ファ...
-
SQLite3のtext→date変換について
-
○ヶ月後の日付の自動算出方法
-
oracle 最新日付との比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessの数値から時間に変換す...
-
今日の日付が入った行のデータ...
-
エクセル 日付による並べ替え...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
ExcelのSUMPRODUCTで日付の範囲...
-
テーブルの主キーをdate型...
-
Excelグラフの日付軸の日付がず...
-
oracle 文字列 01:45 を時間に...
-
23時59分59秒までのデータを抽...
-
SQL スクリプトのご相談
-
WHERE句にて「30日前から今日ま...
-
指定した年月までのデータを取...
-
DB2のSQL(日付)について
-
yyyy/M/dをyyyy/MM/ddに変換
-
重複するIDのデータを1行にま...
-
日付型なら変数の先頭になん...
-
日付書式に変換でこまっています!
-
Excelの並び替え(先頭の文字以...
おすすめ情報