The <productname>PostgreSQL</productname> formatting functions provide a powerful set of tools for converting various data types (date/time, integer, floating point, numeric) to formatted strings and for converting from formatted strings to specific data types. <xref linkend="functions-formatting-table"/> lists them. These functions all follow a common calling convention: the first argument is the value to be formatted and the second argument is a template that defines the output or input format. PostgreSQLの書式設定関数は多彩なデータ型(日付/時刻データ型、整数データ型、浮動小数点数データ型、数値データ型)を整形された文字列に変換したり、整形された文字列を特定のデータ型に変換する強力なツールの一式を提供しています。 表 9.26にこれらを列挙しています。 これら関数は共通の呼び出し規約を踏襲しています。最初の引数は整形される値で2番目の引数は入力書式または出力書式を定義するテンプレートです。
表9.26 書式設定関数
Function 関数 Description 説明 Example(s) 例 |
---|
Converts time stamp to string according to the given format. 与えられた書式設定にしたがってタイムスタンプを文字列に変換します。
|
Converts interval to string according to the given format. 与えられた書式設定にしたがって時間間隔を文字列に変換します。
|
Converts number to string according to the given format; available
for <type>integer</type>, <type>bigint</type>, <type>numeric</type>,
<type>real</type>, <type>double precision</type>.
与えられた書式設定にしたがって数値を文字列に変換します。
|
Converts string to date according to the given format. 与えられた書式設定にしたがって文字列を日付に変換します。
|
Converts string to numeric according to the given format. 与えられた書式設定にしたがって文字列を数値に変換します。
|
Converts string to time stamp according to the given format.
(See also <function>to_timestamp(double precision)</function> in
<xref linkend="functions-datetime-table"/>.)
与えられた書式設定にしたがって文字列をタイムスタンプに変換します。
(表 9.33の
|
<function>to_timestamp</function> and <function>to_date</function>
exist to handle input formats that cannot be converted by
simple casting. For most standard date/time formats, simply casting the
source string to the required data type works, and is much easier.
Similarly, <function>to_number</function> is unnecessary for standard numeric
representations.
to_timestamp
とto_date
は、単純なキャストでは変換できない入力フォーマットを処理するために存在します。
ほとんどの標準的日付および時刻のフォーマットに対しては、入力文字列を必要なデータ型に単純にキャストすれば動作し、その方がずっと簡単です。
同様に、to_number
も標準的な数値表現に対しては不要です。
In a <function>to_char</function> output template string, there are certain
patterns that are recognized and replaced with appropriately-formatted
data based on the given value. Any text that is not a template pattern is
simply copied verbatim. Similarly, in an input template string (for the
other functions), template patterns identify the values to be supplied by
the input data string. If there are characters in the template string
that are not template patterns, the corresponding characters in the input
data string are simply skipped over (whether or not they are equal to the
template string characters).
to_char
用の出力テンプレート文字列には、値に基づいて認識され、適切に整形されたデータで置き換えられるパターンがあります。
テンプレートパターンではない全てのテキストは単にそのままコピーされます。
同様に、(その他の関数用の)入力テンプレート文字列では、テンプレートパターンは入力されたデータ文字列で供給される値を特定します。
テンプレート文字列中にテンプレートパターンではない文字があれば、(テンプレート文字列の文字と同じかどうかにかかわらず)入力文字列データ中の該当文字は単にスキップされます。
<xref linkend="functions-formatting-datetime-table"/> shows the template patterns available for formatting date and time values. 表 9.27に、日付/時刻型の値の書式に使用可能なテンプレートパターンを示します。
表9.27 日付/時刻型の書式テンプレートパターン
パターン | 説明 |
---|---|
HH | 時 (01–12) |
HH12 | 時 (01–12) |
HH24 | 時 (00–23) |
MI | 分 (00–59) |
SS | 秒 (00–59) |
MS | ミリ秒 (000–999) |
US | マイクロ秒 (000000–999999) |
FF1 | 10分の1秒 (0–9) |
FF2 | 100分の1秒 (00–99) |
FF3 | ミリ秒 (000–999) |
FF4 | 10分の1ミリ秒 (0000–9999) |
FF5 | 100分の1ミリ秒 (00000–99999) |
FF6 | マイクロ秒 (000000–999999) |
SSSS , SSSSS | 深夜0時からの秒数 (0–86399) |
AM 、am 、PM またはpm | 午前/午後の指定(ピリオドなし) |
A.M. 、a.m. 、P.M. またはp.m. | 午前/午後の指定(ピリオドあり) |
Y,YYY | カンマ付き年(4桁以上) |
YYYY | 年(4桁以上) |
YYY | 年の下3桁 |
YY | 年の下2桁 |
Y | 年の下1桁 |
IYYY | ISO 8601週番号年(4桁以上) |
IYY | ISO 8601週番号年の下3桁 |
IY | ISO 8601週番号年の下2桁 |
I | ISO 8601週番号年の下1桁 |
BC 、bc 、
AD 、またはad | 紀元前後の指定(ピリオドなし) |
B.C. 、b.c. 、
A.D. 、またはa.d. | 紀元前後の指定(ピリオド付き) |
MONTH | 大文字での完全な月名(9文字になるように空白文字を埋める) |
Month | 大文字で書き始める完全な月名(9文字になるように空白文字を埋める) |
month | 小文字での完全な月名(9文字になるように空白文字を埋める) |
MON | 大文字での短縮形の月名(英語では3文字、ローカライズ化された場合は可変長) |
Mon | 大文字で書き始める短縮形の月名(英語では3文字。ローカライズ化された場合は可変長) |
mon | 小文字での短縮形の月名(英語では3文字。ローカライズ化された場合は可変長) |
MM | 月番号(01–12) |
DAY | 大文字での完全な曜日名(9文字になるように空白文字を埋める) |
Day | 大文字で書き始める完全な曜日名(9文字になるように空白文字を埋める) |
day | 小文字での完全な曜日名(9文字になるように空白文字を埋める) |
DY | 短縮形の大文字での短縮形の曜日名(英語では3文字。ローカライズ化された場合は可変長) |
Dy | 大文字で書き始める短縮形の曜日名(英語では3文字。ローカライズ化された場合は可変長) |
dy | 小文字での短縮形の曜日名(英語では3文字。ローカライズ化された場合は可変長) |
DDD | 通年の日にち番号 (001–366) |
IDDD | ISO 8601週番号年の日にち番号(001–371:通年 第1日は最初のISO週の月曜日) |
DD | 月内の日にち番号 (01–31) |
D | 曜日番号、日曜日(1 )から土曜日(7 )まで |
ID | ISO 8601の曜日番号、月曜日(1 )から日曜日(7 )まで |
W | 月中の週番号 (1–5)(その月の初日がある週が第1週) |
WW | 年間を通じた週番号 (1–53)(元日のある週が第1週) |
IW | ISO 8601週番号年の年間を通じた週番号(01–53;新年の最初の木曜日がある週が第1週) |
CC | 世紀(2桁。21世紀は2001-01-01から開始) |
J | ユリウス日(紀元前4714年11月24日現地時間午前零時からの整数による通算経過日。B.7参照) |
Q | 四半期 |
RM | 大文字ローマ数字による月(I–XII、Iは1月) |
rm | 小文字ローマ数字による月(i–xii、iは1月) |
TZ | 大文字の時間帯省略形 |
tz | 小文字の時間帯省略形 |
TZH | time-zoneの時間 |
TZM | time-zoneの分 |
OF | UTCからの時間帯オフセット(HH あるいはHH : MM ) |
Modifiers can be applied to any template pattern to alter its
behavior. For example, <literal>FMMonth</literal>
is the <literal>Month</literal> pattern with the
<literal>FM</literal> modifier.
<xref linkend="functions-formatting-datetimemod-table"/> shows the
modifier patterns for date/time formatting.
どのようなテンプレートパターンに対しても、その振舞いを変更するために修飾子を適用できます。
例えば、FMMonth
はFM
修飾子の付いたMonth
パターンです。
表 9.28に、日付/時刻書式の修飾子パターンを示します。
表9.28 日付/時刻書式用のテンプレートパターン修飾子
修飾子 | 説明 | 例 |
---|---|---|
FM 接頭辞 | 字詰めモード(先頭の0、およびを空白のパディングを無効) | FMMonth |
TH 接尾辞 | 大文字による序数添え字 | DDTH 、例えば12TH |
th 接尾辞 | 小文字による序数添え字 | DDth 、例えば12th |
FX 接頭辞 | 固定書式のグローバルオプション(使用上の注意事項を参照) | FX Month DD Day |
TM 接頭辞 | 翻訳モード(lc_timeに基づき、ローカライズ化された曜日、月名を使います) | TMMonth |
SP 接尾辞 | スペルモード(未実装) | DDSP |
Usage notes for date/time formatting: 日付/時刻型書式の使用上の注意事項は次のとおりです。
<literal>FM</literal> suppresses leading zeroes and trailing blanks
that would otherwise be added to make the output of a pattern be
fixed-width. In <productname>PostgreSQL</productname>,
<literal>FM</literal> modifies only the next specification, while in
Oracle <literal>FM</literal> affects all subsequent
specifications, and repeated <literal>FM</literal> modifiers
toggle fill mode on and off.
FM
は、先頭にはゼロ、末尾には空白を追加してパターンを固定長にする機能を無効にします。
PostgreSQLでは、FM
はその次に記述されたものだけを変更します。一方Oracleでは、FM
はそれに続く全ての記述に対して影響し、FM
修飾詞を繰り返すと、ゼロや空白を埋めるモードのオンとオフが切り替わります。
<literal>TM</literal> suppresses trailing blanks whether or
not <literal>FM</literal> is specified.
FM
が指定されているかどうかに関わらずTM
は末尾の空白を抑止します。
<function>to_timestamp</function> and <function>to_date</function>
ignore letter case in the input; so for
example <literal>MON</literal>, <literal>Mon</literal>,
and <literal>mon</literal> all accept the same strings. When using
the <literal>TM</literal> modifier, case-folding is done according to
the rules of the function's input collation (see
<xref linkend="collation"/>).
to_timestamp
とto_date
は入力中の大文字小文字の区別を無視します。
例えばMON
、Mon
、mon
はすべて同じ文字列として受け付けます。
TM
修飾子を使うと関数の入力照合順のルールにしたがって大文字小文字の変換が行われます。(23.2参照。)
<function>to_timestamp</function> and <function>to_date</function>
skip multiple blank spaces at the beginning of the input string and
around date and time values unless the <literal>FX</literal> option is used. For example,
<literal>to_timestamp(' 2000 JUN', 'YYYY MON')</literal> and
<literal>to_timestamp('2000 - JUN', 'YYYY-MON')</literal> work, but
<literal>to_timestamp('2000 JUN', 'FXYYYY MON')</literal> returns an error
because <function>to_timestamp</function> expects only a single space.
<literal>FX</literal> must be specified as the first item in
the template.
FX
オプションが使用されていない限り、to_timestamp
とto_date
は入力文字列内最初の連続した空白と、日付と時間の値の周辺の複数の空白を無視します。
例えば、to_timestamp('2000 JUN', 'YYYY MON')
とto_timestamp('2000 - JUN', 'YYYY-MON')
は動作しますが、to_timestamp('2000 JUN','FXYYYY MON')
はエラーを返します。
後者のto_timestamp
は単一のスペースだけがあることを期待するからです。
FX
はテンプレートの第1項目として指定される必要があります。
A separator (a space or non-letter/non-digit character) in the template string of
<function>to_timestamp</function> and <function>to_date</function>
matches any single separator in the input string or is skipped,
unless the <literal>FX</literal> option is used.
For example, <literal>to_timestamp('2000JUN', 'YYYY///MON')</literal> and
<literal>to_timestamp('2000/JUN', 'YYYY MON')</literal> work, but
<literal>to_timestamp('2000//JUN', 'YYYY/MON')</literal>
returns an error because the number of separators in the input string
exceeds the number of separators in the template.
FX
オプションが使用されていない限り、to_timestamp
とto_date
のテンプレート文字列中の区切り文字(空白あるいは記号文字(訳注:原文は"non-letter/non-digit character"))は入力文字中のすべての単一の区切り文字とマッチするか、あるいはマッチしない場合はスキップします。
たとえば、to_timestamp('2000JUN', 'YYYY///MON')
とto_timestamp('2000/JUN', 'YYYY MON')
は動作しますが、to_timestamp('2000//JUN', 'YYYY/MON')
は入力文字列中の区切り文字の数がテンプレート中の区切り文字の数を上回っているため、エラーを返します。
If <literal>FX</literal> is specified, a separator in the template string
matches exactly one character in the input string. But note that the
input string character is not required to be the same as the separator from the template string.
For example, <literal>to_timestamp('2000/JUN', 'FXYYYY MON')</literal>
works, but <literal>to_timestamp('2000/JUN', 'FXYYYY MON')</literal>
returns an error because the second space in the template string consumes
the letter <literal>J</literal> from the input string.
FX
が指定されていると、テンプレート文字列中の区切り文字は正確に入力文字列中の一文字とマッチします。
しかし、入力文字列の文字はテンプレート文字列中の区切り文字と一致する必要はないことに注意してください。
たとえば、to_timestamp('2000/JUN', 'FXYYYY MON')
は動作しますが、to_timestamp('2000/JUN', 'FXYYYY MON')
はテンプレート文字列中の二番目の空白が入力文字列中の文字J
を消費するため、エラーを返します。
A <literal>TZH</literal> template pattern can match a signed number.
Without the <literal>FX</literal> option, minus signs may be ambiguous,
and could be interpreted as a separator.
This ambiguity is resolved as follows: If the number of separators before
<literal>TZH</literal> in the template string is less than the number of
separators before the minus sign in the input string, the minus sign
is interpreted as part of <literal>TZH</literal>.
Otherwise, the minus sign is considered to be a separator between values.
For example, <literal>to_timestamp('2000 -10', 'YYYY TZH')</literal> matches
<literal>-10</literal> to <literal>TZH</literal>, but
<literal>to_timestamp('2000 -10', 'YYYY TZH')</literal>
matches <literal>10</literal> to <literal>TZH</literal>.
TZH
テンプレートパターンは符号付きの数字とマッチします。
FX
オプションが無い場合、マイナス符号は曖昧で、区切り文字として解釈されるかも知れません。
この曖昧さは次のようにして解消されます。
テンプレート文字列中のTZH
の前の区切り文字の数が入力文字列中のマイナス符号の前の区切り文字の数よりも少なければ、そのマイナス符号はTZH
の一部として解釈されます。
そうでない場合、マイナス記号が値の区切り記号と見なされます。
たとえば、to_timestamp('2000 -10', 'YYYY TZH')
では-10
がTZH
にマッチしますが、to_timestamp('2000 -10', 'YYYY TZH')
では10
がTZH
にマッチします。
Ordinary text is allowed in <function>to_char</function>
templates and will be output literally. You can put a substring
in double quotes to force it to be interpreted as literal text
even if it contains template patterns. For example, in
<literal>'"Hello Year "YYYY'</literal>, the <literal>YYYY</literal>
will be replaced by the year data, but the single <literal>Y</literal> in <literal>Year</literal>
will not be.
In <function>to_date</function>, <function>to_number</function>,
and <function>to_timestamp</function>, literal text and double-quoted
strings result in skipping the number of characters contained in the
string; for example <literal>"XX"</literal> skips two input characters
(whether or not they are <literal>XX</literal>).
to_char
テンプレートには、通常のテキストを入れることができ、それはそのまま出力されます。
部分文字列を二重引用符で括ることで、部分文字列にテンプレートパターンがあったとしても、強制的にリテラルテキストとして解釈させることができます。
例えば、'"Hello Year "YYYY'
ではYYYY
は年データに置換されてしまいますが、Year
内のY
は置換されません。
to_date
、to_number
、to_timestamp
では、二重引用符で括られた文字の数だけ入力された文字をスキップします。例えば"XX"
は2文字の入力文字(それがXX
であるかどうかにかかわらず)をスキップします。
Prior to <productname>PostgreSQL</productname> 12, it was possible to
skip arbitrary text in the input string using non-letter or non-digit
characters. For example,
<literal>to_timestamp('2000y6m1d', 'yyyy-MM-DD')</literal> used to
work. Now you can only use letter characters for this purpose. For example,
<literal>to_timestamp('2000y6m1d', 'yyyytMMtDDt')</literal> and
<literal>to_timestamp('2000y6m1d', 'yyyy"y"MM"m"DD"d"')</literal>
skip <literal>y</literal>, <literal>m</literal>, and
<literal>d</literal>.
PostgreSQL 12より前では、記号文字(訳注:原文は"non-letter or non-digit")を使って入力文字列中の任意のテキストをスキップすることが可能でした。
たとえば、to_timestamp('2000y6m1d', 'yyyy-MM-DD')
は動作しました。
現在は、この目的のために非記号文字(訳注:原文は"letter characters")だけを使うことができます。
たとえば、to_timestamp('2000y6m1d', 'yyyytMMtDDt')
とto_timestamp('2000y6m1d', 'yyyy"y"MM"m"DD"d"')
は、y
、m
、d
をスキップします。
If you want to have a double quote in the output you must
precede it with a backslash, for example <literal>'\"YYYY
Month\"'</literal>. <!-- "" font-lock sanity :-) -->
Backslashes are not otherwise special outside of double-quoted
strings. Within a double-quoted string, a backslash causes the
next character to be taken literally, whatever it is (but this
has no special effect unless the next character is a double quote
or another backslash).
出力に二重引用符を付けたい場合、'\"YYYY Month\"'
のようにその前にバックスラッシュを付けなければなりません。
バックスラッシュは、二重引用符の外側では特別扱いされません。
二重引用符の内側では、バックスラッシュによって次の文字が何であれ文字通りに扱われるようになります。
(しかし、次の文字が二重引用符であるか、あるいは別のバックスラッシュでない限り、これは特別な効果をもたらしません。)
In <function>to_timestamp</function> and <function>to_date</function>,
if the year format specification is less than four digits, e.g.,
<literal>YYY</literal>, and the supplied year is less than four digits,
the year will be adjusted to be nearest to the year 2020, e.g.,
<literal>95</literal> becomes 1995.
to_timestamp
においてto_date
、YYY
の様に4桁未満の年書式が指定され、かつ与えられる年が4桁未満だった場合、年は2020年に最も近くなるよう調整されます。例えば、95
の場合は1995年になります。
In <function>to_timestamp</function> and <function>to_date</function>,
negative years are treated as signifying BC. If you write both a
negative year and an explicit <literal>BC</literal> field, you get AD
again. An input of year zero is treated as 1 BC.
to_timestamp
およびto_date
において負の年はBCを表します。
負の年と明示的なBC
フィールドの両方を記述すると、再びADになります。
すべての形のゼロ年はBC 1として扱われます。
In <function>to_timestamp</function> and <function>to_date</function>,
the <literal>YYYY</literal> conversion has a restriction when
processing years with more than 4 digits. You must
use some non-digit character or template after <literal>YYYY</literal>,
otherwise the year is always interpreted as 4 digits. For example
(with the year 20000):
<literal>to_date('200001130', 'YYYYMMDD')</literal> will be
interpreted as a 4-digit year; instead use a non-digit
separator after the year, like
<literal>to_date('20000-1130', 'YYYY-MMDD')</literal> or
<literal>to_date('20000Nov30', 'YYYYMonDD')</literal>.
to_timestamp
とto_date
では、4桁より多い年を処理する際にYYYY
変換に制限があります。
YYYY
の後には数字以外の文字かテンプレートを使用しなければなりません。
そうしないと、年は常に4桁と解釈されます。
例えば(20000年として)、to_date('200001130', 'YYYYMMDD')
は4桁の年として解釈されます。
代わりに、to_date('20000-1130', 'YYYY-MMDD')
やto_date('20000Nov30', 'YYYYMonDD')
のように、年の後に非数字の区切り文字を使用してください。
In <function>to_timestamp</function> and <function>to_date</function>,
the <literal>CC</literal> (century) field is accepted but ignored
if there is a <literal>YYY</literal>, <literal>YYYY</literal> or
<literal>Y,YYY</literal> field. If <literal>CC</literal> is used with
<literal>YY</literal> or <literal>Y</literal> then the result is
computed as that year in the specified century. If the century is
specified but the year is not, the first year of the century
is assumed.
to_timestamp
およびto_date
においてYYY
、YYYY
、もしくはY,YYY
フィールドが存在するとCC
(世紀)フィールドは受け入れられますが、無視されます。
CC
がYY
もしくはY
と共に使用されると、結果は指定された世紀のその年として計算されます。
世紀が指定され、年が指定されないときは、その世紀の最初の年と想定されます。
In <function>to_timestamp</function> and <function>to_date</function>,
weekday names or numbers (<literal>DAY</literal>, <literal>D</literal>,
and related field types) are accepted but are ignored for purposes of
computing the result. The same is true for quarter
(<literal>Q</literal>) fields.
to_timestamp
およびto_date
において、曜日の名前や数字(DAY
、D
および関連したフィールドの型)は受け付けられますが、結果を計算するという目的においては無視されます。
同じことは四半期(Q
)フィールドにも当てはまります。
In <function>to_timestamp</function> and <function>to_date</function>,
an ISO 8601 week-numbering date (as distinct from a Gregorian date)
can be specified in one of two ways:
to_timestamp
およびto_date
において、
ISO 8601週番号日は(グレゴリオ暦の日付とは異なって)以下の2つの方法のうちのひとつで指定できます。
Year, week number, and weekday: for
example <literal>to_date('2006-42-4', 'IYYY-IW-ID')</literal>
returns the date <literal>2006-10-19</literal>.
If you omit the weekday it is assumed to be 1 (Monday).
年、通年の週番号、曜日番号。
例えば、to_date('2006-42-4', 'IYYY-IW-ID')
は、日付2006-10-19
を返します。
曜日番号を省略した場合、1(月曜日)と想定されます。
Year and day of year: for example <literal>to_date('2006-291',
'IYYY-IDDD')</literal> also returns <literal>2006-10-19</literal>.
年と通年の日付番号。例えば、to_date('2006-291', 'IYYY-IDDD')
も2006-10-19
を返します。
Attempting to enter a date using a mixture of ISO 8601 week-numbering fields and Gregorian date fields is nonsensical, and will cause an error. In the context of an ISO 8601 week-numbering year, the concept of a <quote>month</quote> or <quote>day of month</quote> has no meaning. In the context of a Gregorian year, the ISO week has no meaning. ISO 8601週番号とグレゴリオ暦日のフィールドを混在して使用して日付を構築する試みは無意味なことで、エラーの原因になります。 ISO 8601週番号年の文脈では、「月」、あるいは「月内の日付番号」は意味を持ちません。 グレゴリオ暦の年の文脈では、ISO週番号は意味を持ちません。
While <function>to_date</function> will reject a mixture of
Gregorian and ISO week-numbering date
fields, <function>to_char</function> will not, since output format
specifications like <literal>YYYY-MM-DD (IYYY-IDDD)</literal> can be
useful. But avoid writing something like <literal>IYYY-MM-DD</literal>;
that would yield surprising results near the start of the year.
(See <xref linkend="functions-datetime-extract"/> for more
information.)
to_date
はグレゴリオとISO週番号日のフィールドの混在を拒否しますが、to_char
はそうではありません。YYYY-MM-DD (IYYY-IDDD)
のような出力書式指定が有用な場合があるからです。
しかし、IYYY-MM-DD
のような書き方は避けてください。年の初めの近くで驚くべき結果になるでしょう。
(より詳細な情報は9.9.1を参照してください。)
In <function>to_timestamp</function>, millisecond
(<literal>MS</literal>) or microsecond (<literal>US</literal>)
fields are used as the
seconds digits after the decimal point. For example
<literal>to_timestamp('12.3', 'SS.MS')</literal> is not 3 milliseconds,
but 300, because the conversion treats it as 12 + 0.3 seconds.
So, for the format <literal>SS.MS</literal>, the input values
<literal>12.3</literal>, <literal>12.30</literal>,
and <literal>12.300</literal> specify the
same number of milliseconds. To get three milliseconds, one must write
<literal>12.003</literal>, which the conversion treats as
12 + 0.003 = 12.003 seconds.
to_timestamp
において、ミリ秒(MS
)およびマイクロ秒(US
)フィールドは小数点の後の秒の桁として使用されます。
例えば、to_timestamp('12.3', 'SS.MS')
は3ミリ秒ではなく300ミリ秒です。なぜなら変換においてこれは12 + 0.3秒と計算されるからです。
従ってSS.MS
書式に対して入力値12.3
、12.30
、12.300
は同じミリ秒数を指定することになります。
3ミリ秒が必要な場合には12:003
のようにしなければなりません。この時、変換において12 + 0.003 = 12.003秒と計算します。
Here is a more
complex example:
<literal>to_timestamp('15:12:02.020.001230', 'HH24:MI:SS.MS.US')</literal>
is 15 hours, 12 minutes, and 2 seconds + 20 milliseconds +
1230 microseconds = 2.021230 seconds.
もう少し複雑な例を挙げます。
to_timestamp('15:12:02.020.001230', 'HH24:MI:SS.MS.US')
は15時間12分と2秒+20ミリ秒+1230マイクロ秒 = 2.021230秒です。
<function>to_char(..., 'ID')</function>'s day of the week numbering
matches the <function>extract(isodow from ...)</function> function, but
<function>to_char(..., 'D')</function>'s does not match
<function>extract(dow from ...)</function>'s day numbering.
to_char(..., 'ID')
の曜日番号付けはextract(isodow from ...)
関数に一致しますが、to_char(..., 'D')
の曜日番号付けはextract(dow from ...)
の曜日番号付けに一致しません。
<function>to_char(interval)</function> formats <literal>HH</literal> and
<literal>HH12</literal> as shown on a 12-hour clock, for example zero hours
and 36 hours both output as <literal>12</literal>, while <literal>HH24</literal>
outputs the full hour value, which can exceed 23 in
an <type>interval</type> value.
to_char(interval)
関数は、HH
とHH12
を12時間の時計に表示されるように整形します。
例えば0時間と36時間はいずれも12
として出力します。
一方HH24
は時間の値をそのまま出力し、interval
の値であれば23を超えることも可能です。
<xref linkend="functions-formatting-numeric-table"/> shows the template patterns available for formatting numeric values. 表 9.29に、数値の書式設定に使用可能なテンプレートパターンを示します。
表9.29 数値書式用のテンプレートパターン
パターン | 説明 |
---|---|
9 | 数字の位置(必要ないときは表示しない) |
0 | 数字の位置(必要ないときでも表示する) |
. (ピリオド) | 小数点 |
, (カンマ) | 千単位で区切る符号 |
PR | 負の値の角括弧表示 |
S | 符号付き値(ロケールを使用) |
L | 通貨記号(ロケールを使用) |
D | 小数点(ロケールを使用) |
G | グループ区切り文字(ロケールを使用) |
MI | (数値 < 0であれば)指定位置にマイナス記号 |
PL | (数値 > 0であれば)指定位置にプラス記号 |
SG | 指定された位置にプラス/マイナス記号 |
RN | ローマ数字(入力は1~3999) |
TH またはth | 序数接尾辞 |
V | 指定桁でのシフト(注意事項を参照) |
EEEE | 科学技術表記法用の指数 |
Usage notes for numeric formatting: 数値型書式の使用上の注意事項は次のとおりです。
<literal>0</literal> specifies a digit position that will always be printed,
even if it contains a leading/trailing zero. <literal>9</literal> also
specifies a digit position, but if it is a leading zero then it will
be replaced by a space, while if it is a trailing zero and fill mode
is specified then it will be deleted. (For <function>to_number()</function>,
these two pattern characters are equivalent.)
0
は、それが先頭あるいは末尾のゼロであっても必ず表示する数字の位置を指定します。
9
も数字の位置を指定しますが、先頭のゼロであればそれは空白で置換され、また末尾のゼロで字詰めモードが指定されているときは削除されます。
(to_number()
では、これら2つのパターン文字は同じ意味になります。)
If the format provides fewer fractional digits than the number being
formatted, <function>to_char()</function> will round the number to
the specified number of fractional digits.
フォーマットが提供する小数点以下の桁数がフォーマットされる数値よりも少ない場合、to_char()
は指定された小数点以下の桁数に数値を丸めます。
The pattern characters <literal>S</literal>, <literal>L</literal>, <literal>D</literal>,
and <literal>G</literal> represent the sign, currency symbol, decimal point,
and thousands separator characters defined by the current locale
(see <xref linkend="guc-lc-monetary"/>
and <xref linkend="guc-lc-numeric"/>). The pattern characters period
and comma represent those exact characters, with the meanings of
decimal point and thousands separator, regardless of locale.
パターン文字S
、L
、D
、G
はそれぞれ現在のロケールで定義された符号、通貨記号、小数点、3桁区切り文字を表します(lc_monetaryおよびlc_numericを参照)。
パターン文字のピリオドとカンマはいずれもその文字そのものを表し、ロケールとは関係なく小数点と3桁区切り文字の意味を持ちます。
If no explicit provision is made for a sign
in <function>to_char()</function>'s pattern, one column will be reserved for
the sign, and it will be anchored to (appear just left of) the
number. If <literal>S</literal> appears just left of some <literal>9</literal>'s,
it will likewise be anchored to the number.
to_char()
のパターンで符号について明示的な条件付けがない場合、符号のために一桁が予約され、それは数に繋げられます(すぐ左側に置かれます)。
S
がいくつかの9
のすぐ左に置かれた場合、同様に数に繋げられます。
A sign formatted using <literal>SG</literal>, <literal>PL</literal>, or
<literal>MI</literal> is not anchored to
the number; for example,
<literal>to_char(-12, 'MI9999')</literal> produces <literal>'- 12'</literal>
but <literal>to_char(-12, 'S9999')</literal> produces <literal>' -12'</literal>.
(The Oracle implementation does not allow the use of
<literal>MI</literal> before <literal>9</literal>, but rather
requires that <literal>9</literal> precede
<literal>MI</literal>.)
SG
、PL
、またはMI
で整形された符号は、数値と関連付けられません。
例えば、to_char(-12, 'MI9999')
は'- 12'
となる一方、to_char(-12, 'S9999')
は' -12'
となります。
(Oracleの実装では9
の前にMI
が置かれてはならず、9
の後にMI
が置かれることを要求しています。)
<literal>TH</literal> does not convert values less than zero
and does not convert fractional numbers.
TH
はゼロ未満の値と小数は変換しません
<literal>PL</literal>, <literal>SG</literal>, and
<literal>TH</literal> are <productname>PostgreSQL</productname>
extensions.
PL
、SG
、およびTH
はPostgreSQLの拡張です。
In <function>to_number</function>, if non-data template patterns such
as <literal>L</literal> or <literal>TH</literal> are used, the
corresponding number of input characters are skipped, whether or not
they match the template pattern, unless they are data characters
(that is, digits, sign, decimal point, or comma). For
example, <literal>TH</literal> would skip two non-data characters.
to_number
において、L
あるいはTH
のように非データテンプレートが使われた場合には、それがデータ文字(すなわち、数字、符号、10進小数点あるいはカンマ)でない限りテンプレートパターンにマッチするかどうかにかかわらず、該当する数分だけの入力文字がスキップされます。
例えば、TH
は2つの非データ文字をスキップします。
<literal>V</literal> with <function>to_char</function>
multiplies the input values by
<literal>10^<replaceable>n</replaceable></literal>, where
<replaceable>n</replaceable> is the number of digits following
<literal>V</literal>. <literal>V</literal> with
<function>to_number</function> divides in a similar manner.
<function>to_char</function> and <function>to_number</function>
do not support the use of
<literal>V</literal> combined with a decimal point
(e.g., <literal>99.9V99</literal> is not allowed).
V
をto_char
につけると、入力値を10^
倍します。
ここでn
n
はV
に続く桁数です。
V
をto_number
につけると、同じように割り算をします。
to_char
およびto_number
は、小数点とV
との混在をサポートしません(例えば、99.9V99
とはできません)。
<literal>EEEE</literal> (scientific notation) cannot be used in
combination with any of the other formatting patterns or
modifiers other than digit and decimal point patterns, and must be at the end of the format string
(e.g., <literal>9.99EEEE</literal> is a valid pattern).
EEEE
(科学技術表記)は、桁と小数点のパターンを除き、他の書式パターンや修飾子と組み合わせて使うことはできず、また必ず書式文字列の最後に位置しなければなりません(例えば、9.99EEEE
は正しい表記となります)。
Certain modifiers can be applied to any template pattern to alter its
behavior. For example, <literal>FM99.99</literal>
is the <literal>99.99</literal> pattern with the
<literal>FM</literal> modifier.
<xref linkend="functions-formatting-numericmod-table"/> shows the
modifier patterns for numeric formatting.
すべてのテンプレートについて、その動作を変えるために、いくつかの修飾子を適用できます。
例えば、FM99.99
はFM
修飾子が付いた99.99
パターンです。
表 9.30に、数値の書式用の修飾子パターンを示します。
表9.30 数値の書式用テンプレートパターン修飾子
修飾子 | 説明 | 例 |
---|---|---|
FM 添え字 | 字詰めモード(末尾の0と空白の埋め字を無効にする) | FM99.99 |
TH 添え字 | 大文字による序数添え字 | 999TH |
th 添え字 | 小文字による序数添え字 | 999th |
<xref linkend="functions-formatting-examples-table"/> shows some
examples of the use of the <function>to_char</function> function.
表 9.31に、to_char
関数を使用した例をいくつか示します。
表9.31 to_char
の例
式 | 結果 |
---|---|
to_char(current_timestamp, 'Day, DD HH12:MI:SS') | 'Tuesday , 06 05:39:18' |
to_char(current_timestamp, 'FMDay, FMDD HH12:MI:SS') | 'Tuesday, 6 05:39:18' |
to_char(current_timestamp AT TIME ZONE
'UTC', 'YYYY-MM-DD"T"HH24:MI:SS"Z"') | '2022-12-06T05:39:18Z' ,
ISO 8601 extended format |
to_char(-0.1, '99.99') | ' -.10' |
to_char(-0.1, 'FM9.99') | '-.1' |
to_char(-0.1, 'FM90.99') | '-0.1' |
to_char(0.1, '0.9') | ' 0.1' |
to_char(12, '9990999.9') | ' 0012.0' |
to_char(12, 'FM9990999.9') | '0012.' |
to_char(485, '999') | ' 485' |
to_char(-485, '999') | '-485' |
to_char(485, '9 9 9') | ' 4 8 5' |
to_char(1485, '9,999') | ' 1,485' |
to_char(1485, '9G999') | ' 1 485' |
to_char(148.5, '999.999') | ' 148.500' |
to_char(148.5, 'FM999.999') | '148.5' |
to_char(148.5, 'FM999.990') | '148.500' |
to_char(148.5, '999D999') | ' 148,500' |
to_char(3148.5, '9G999D999') | ' 3 148,500' |
to_char(-485, '999S') | '485-' |
to_char(-485, '999MI') | '485-' |
to_char(485, '999MI') | '485 ' |
to_char(485, 'FM999MI') | '485' |
to_char(485, 'PL999') | '+485' |
to_char(485, 'SG999') | '+485' |
to_char(-485, 'SG999') | '-485' |
to_char(-485, '9SG99') | '4-85' |
to_char(-485, '999PR') | '<485>' |
to_char(485, 'L999') | 'DM 485' |
to_char(485, 'RN') | ' CDLXXXV' |
to_char(485, 'FMRN') | 'CDLXXXV' |
to_char(5.2, 'FMRN') | 'V' |
to_char(482, '999th') | ' 482nd' |
to_char(485, '"Good number:"999') | 'Good number: 485' |
to_char(485.8, '"Pre:"999" Post:" .999') | 'Pre: 485 Post: .800' |
to_char(12, '99V999') | ' 12000' |
to_char(12.4, '99V999') | ' 12400' |
to_char(12.45, '99V9') | ' 125' |
to_char(0.0004859, '9.99EEEE') | ' 4.86e-04' |