Объявление типов данных Postgres и типизация, в чем разница между двоеточием и не - PullRequest
0 голосов
/ 11 октября 2019

Основной вопрос

Мне было интересно, в чем разница между объявлением типа с использованием двойной точки с запятой ::, против , а не с использованием :: в Postgres.

Пример

INTERVAL '1 day'
-- vs
'1 day'::INTERVAL

Так много вопросов ...

  • Является ли :: приведением типа? Например, приведение строки к INTERVAL.

  • Что бы вы назвали первым примером без с использованием ::, или это то, как вы определяете этот тип данныхбез кастинга?

  • Есть ли какие-либо преимущества в использовании одного над другим?

  • Был ли один представлен раньше другого?

  • Есть ли преимущества в скорости?

  • Является ли один метод стандартизированным и предпочтительным по сравнению с другим в сообществе?

  • есть документ с рекомендациями по стилю сообщества?

  • Это уникально для Postgres или применимо и к SQL?

Извините за все вопросы!

1 Ответ

1 голос
/ 11 октября 2019

Я мог бы сослаться на INTERVAL '1 day' как интервал литерал . Это означает, что, как написано, так и без приведения, в нем указывается буквальное значение Postgres INTERVAL. С другой стороны, '1 day'::INTERVAL на самом деле является приведением текста 1 day, чтобы сделать его значением INTERVAL.

Синтаксис приведения :: не является частьюСтандарт ANSI и специфичен для Postgres. Обратите внимание, что CAST('1 day' AS INTERVAL) более или менее идентичен использованию синтаксиса с двойным двоеточием '1 day'::INTERVAL.

Если вас беспокоит необходимость в один прекрасный день перенести ваш код Postgres SQL в другую базу данных, то вы можете придерживатьсяиспользование CAST() над ::, первое, которое поддерживается большинством других баз данных.

С точки зрения производительности INTERVAL '1 day' не требует от Postgres выполнения каких-либо явных операций приведения, тогда как CAST или :: требуют явного приведения. Там могут быть небольшие различия в производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...