sql >> データベース >  >> RDS >> SQLite

SQLiteでのDateTime()関数のしくみ

    SQLite datetime() 関数を使用すると、時間文字列と任意の修飾子に基づいて日付と時刻の値を返すことができます。

    日付を次の形式で返します:YYYY-MM-DD HH:MM:SS

    この関数を使用するには、時間文字列に加えて、任意の(オプションの)修飾子を指定する必要があります。モディファイアを使用すると、日数を追加したり、現地時間に設定したりするなど、日付を変更できます。

    構文

    構文は次のようになります:

    datetime(timestring, modifier, modifier, ...)

    timestring 引数は有効な時間文字列である必要があります。

    modifier 引数はオプションです。 1つ以上の修飾子を指定できます。修飾子を指定する場合は、有効な修飾子である必要があります。

    datetime()を示す例を次に示します。 1つの引数で使用されている関数。

    SELECT datetime('now');

    結果:

    2020-04-28 23:56:06

    now 時間文字列は現在の日付と時刻に変換されます。

    修飾子を追加する

    修飾子を使用して、前の結果を変更できます。これが例です。

    SELECT datetime('now', '+3 hours');

    結果:

    2020-04-29 02:56:52

    この場合、時間に3時間を追加しました。元の時刻を考えると、これにより日付が翌日に繰り越されました。

    複数の修飾子

    前述のように、1つ以上の修飾子を追加できます。前の例に別の修飾子を追加する例を次に示します。

    SELECT datetime('now', '+3 hours', 'localtime');

    結果:

    2020-04-29 12:58:13

    私の場合、localtime 修飾子により、時間が前に進みました。

    これを行う理由は、localtime 修飾子は、提供された時間文字列が協定世界時(UTC)であることを前提としています。次に、現地時間を表示するように時間文字列を調整します。

    したがって、現地時間によっては異なる結果が得られる場合があります。

    ここでも、元の現地時間を変更された結果と比較しています:

    SELECT 
      datetime('now', 'localtime') AS "Local",
      datetime('now', '+3 hours', 'localtime') AS "Modified";

    結果:

    Local                Modified           
    -------------------  -------------------
    2020-04-29 10:02:09  2020-04-29 13:02:09

    時間文字列としての日付

    上記の例では、nowを使用しています 時間文字列として使用できますが、任意の有効な時間文字列を指定できます。

    日付部分のみを指定すると、時間部分はすべてゼロに設定されます。

    SELECT datetime('2010-08-15');

    結果:

    2010-08-15 00:00:00

    時間部分のみが指定されている場合、日付は2000-01-01に設定されます。

    SELECT datetime('23:58:57');

    結果:

    2000-01-01 23:58:57

    ユリウス日を時間文字列として使用する例を次に示します。

    SELECT datetime('2451545.49927083');

    結果:

    2000-01-01 23:58:57

    datetime()とstrftime()

    datetime() 関数は、strftime('%Y-%m-%d %H:%M:%S', ...)とまったく同じ結果を返します。 戻り値。 datetime() 関数はそれを行うためのより便利な方法です。

    SELECT 
      datetime('now'),
      strftime('%Y-%m-%d %H:%M:%S', 'now');

    結果:

    datetime('now')      strftime('%Y-%m-%d %H:%M:%S', 'now')
    -------------------  ------------------------------------
    2020-04-29 00:16:12  2020-04-29 00:16:12                 

    日付範囲

    すべてのSQLite日付および時刻関数と同様に、datetime() 0000-01-0100:00:00から9999-12-3123:59:59(ユリウス日番号1721059.5から5373484.5)の間の日付でのみ機能します。

    その範囲外の日付の場合、結果は未定義です。


    1. WHERE句の列の順序は重要ですか?

    2. MySQLバージョンを確認する方法

    3. Oracleでは値が先行ゼロで表示されていません

    4. MIN/MAXとORDERBYおよびLIMIT