Использование скалярных выражений
В многомерных выражениях скалярное выражение является элементом синтаксиса многомерных выражений, при вычислении которого возвращается единственное в контексте вычисления значение.
К скалярным относятся выражения строкового, числового и календарного типа в многомерных выражениях.
Скалярные выражения обычно используются в определениях вычисляемых элементов, так как вычисляемые элементы должны возвращать скалярное значение. В следующем запросе показаны примеры вычисляемых элементов в измерении мер, в которых используются различные типы скалярного выражения:
MEMBER MEASURES.NumericValue AS 10
MEMBER MEASURES.NumericExpression AS 10 + 10
MEMBER MEASURES.NumericExpressionBasedOnMeasure AS [Measures].[Internet Sales Amount] + 10
MEMBER MEASURES.StringValue AS «10»
MEMBER MEASURES.ConcatenatedString AS «10» + «10»
MEMBER MEASURES.StringFunction AS MEASURES.CURRENTMEMBER.NAME
MEMBER MEASURES.TodaysDate AS NOW()
MEASURES.StringValue, MEASURES.ConcatenatedString, MEASURES.StringFunction, MEASURES.TodaysDate>
FROM [Adventure Works]
Единственный тип данных, который может быть возвращен вычисляемой или иной мерой — тип OLE Variant. Поэтому иногда требуется привести значение меры к определенному типу, чтобы обеспечить ожидаемое поведение. Пример этого приведен в следующем запросе:
WITH //Two calculated measures that return strings MEMBER MEASURES.NumericString1 AS "10" MEMBER MEASURES.NumericString2 AS "10" //In this case, the + operator acts to concatenate the strings MEMBER MEASURES.Concatenation AS MEASURES.NumericString1 + MEASURES.NumericString2 //Casting one value to an integer with the CINT function causes the second measure //to be treated as an integer too, so that the + operator now acts to add the values MEMBER MEASURES.Addition AS CINT(MEASURES.NumericString1) + MEASURES.NumericString2 SELECT ON COLUMNS FROM [Adventure Works]
Скалярные выражения в Azure Cosmos DB для NoSQL
Предложение SELECT поддерживает скалярные выражения. Скалярное выражение — это сочетание символов и операторов, в результате вычисления которых возвращается одно значение. К скалярным выражениям относятся константы, ссылки на свойства, ссылки на элементы массива, ссылки на псевдонимы и вызовы функций. C помощью операторов скалярные выражения можно объединять в сложные.
Синтаксис
::= | input_alias | parameter_name | .property_name | '['"property_name"|array_index']' | unary_operator | binary_operator | ? : | | | | () ::= 'udf.' Udf_scalar_function([][,…n]) | builtin_scalar_function([][,…n]) ::= ' : ][,…n] '>' ::= '[' [][,…n] ']'
Аргументы
Описание | |
---|---|
Представляет значение константы. Дополнительные сведения см. в подразделе Константы. | |
input_alias | Представляет значение, определяемое аргументом input_alias в предложении FROM . |
Выражение гарантировано не может принять значение undefined. Значения undefined пропускаются. | |
.property_name | Представляет значение свойства объекта. Если свойство не существует или свойство ссылается на значение, которое не является объектом, выражение вычисляется как неопределенное значение. |
‘[‘»property_name»|array_index’]’ | Представляет значение свойства с именем property_name или элемент массива с индексом array_index из массива. Если индекс свойства или массива не существует или на индекс свойства или массива ссылается значение, которое не является объектом или массивом, выражение вычисляется как неопределенное значение. |
unary_operator | Представляет оператор, применяемый к одному значению. |
binary_operator | Представляет оператор, применяемый к двум значениям. |
Представляет значение, определяемое результатом вызова функции. | |
udf_scalar_function | Имя определяемой пользователем скалярной функции. |
builtin_scalar_function | Имя встроенной скалярной функции. |
Представляет значение, полученное в процессе создания объекта с заданными свойствами и их значениями. | |
Представляет значение, полученное в процессе создания массива с заданными значениями в качестве элементов. | |
parameter_name | Представляет значение указанного имени параметра. Имена параметров должны начинаться со знака \»\@\». |
Примеры
Наиболее распространенным примером скалярного выражения является математическое уравнение.
SELECT VALUE ((2 + 11 % 7) - 2) / 2
В следующем примере результат скалярного выражения является логическим:
SELECT ("Redmond" = "WA") AS isCitySameAsState, ("WA" = "WA") AS isStateSameAsState
Комментарии
- Все аргументы должны быть определены при вызове встроенной или определяемой пользователем скалярной функции. Если какой-либо из аргументов не определен, функция не вызывается, а результатом будет undefined .
- Любое свойство, которому присваивается неопределенное значение, пропускается и не включается в созданный объект при создании объекта.
- Любое значение элемента, которому присваивается неопределенное значение, пропускается и не включается в созданный объект при создании массива. Этот пропуск приводит к тому, что следующий определенный элемент занимает свое место таким образом, чтобы созданный массив не пропускал индексы.
См. также
- Вложенные запросы
- Логические операторы
Скалярные типы данных
Каждая константа, переменная и параметр имеют тип данных (или тип), который определяет формат хранения, ограничения и допустимый диапазон значений. PL/SQL предоставляет множество предопределенных типов данных.
Скалярный тип данных (scalar data type) содержит одно значение и не имеет внутренних компонентов. Скалярные типы данных делятся на четыре категории:
- Числовые
- Символьные
- Даты
- Логические данные.
Символьный и числовой типы данных имеют подтипы, которые налагают определенные ограничения на базовый тип. Например, INTEGER (“целое число”) и POSITIVE (“положительное число”) являются подтипами базового типа NUMBER.
Числовые: | |
---|---|
NUMBER [(точность, масштаб)] | Числа с точность и масштабом. Точность в диапазоне от 1 до 38, а масштаб – от -84 до 127 |
BINARY_INTEGER | Основной тип для целых числе от — 2 147 483 647 до 2 147 483 647 |
PLS_INTEGER | Основной тип для целых числе со знаком — 2 147 483 647 до 2 147 483 647. Значение PLS_INTEGER требуют меньше памяти и быстрее значений NUMBER и BINARY_INTEGER. Арифметические операции на значениями типа PLS_INTEGER быстрее, чем над данными NUMBER |
Символьные: | |
---|---|
CHAR [ (Максимальная_Длина)] | Основной тип для символьных данных постоянной длины до 32768 байтов. Если максимальная длина не задана, то по умолчанию она равна 1. |
VARCHAR2 (Максимальная_Длина) | Основной тип для символьных данных переменной длины до 32767 байтов. Для переменных и констант типа VARCHAR2 размера по умолчанию не существует. |
Даты: | |
---|---|
DATE | Основной тип для дат и времени. Значение DATE включают время в секундах с полуночи. Дипозон дат: 4712 г. До.н.э – 9999 н.э. |
TIMESTAMP [(точность)] | Расширяет тип данных DATE и хранит год, месяц, день, час, минуту, секунду и доли секунды. Для задания точности необходимо указывать целое литеральное значение в диопазоне от 0 до 9. Это число цифр в дробной части поля секунд. По умолчанию — 6 |
TIMESTAMP [(точность)] WITH TIME ZONE | Расширяет тип данных TIMESTAMP и содержит смещение временной зоны. Смещение временной зоны представляет собой разницу в часах и минутах между местным временем и универсальным глобальным временем (Coordinated Universal Time или UTC). Для задания точности необходимо указывать целое литеральное значение в дипозоне от 0 до 9. Это число цифр в дробной части поля секунд. По умолчанию – 6 |
TIMESTAMP [(точность)] WITH LOCAL TIME ZONE | Расширяет тип данных TIMESTAMP и содержит смещение временной зоны. Смещение временной зоны представляет собой разницу в часах и минута между местным временем и универсальным глобальным временем UTC. В отличие от TIMESTAMP WITH TIME ZONE вставляемые в столбцы БД значения данного типа нормализуются в соответствии с временной зоной базы. Кроме того, смещение временной зоны не хранится в столбце. При извлечении значения из базы данных Oracle преобразует его к временной зоне сеанса. |
INTERVAL YEAR [(точность)] TO MONTH | Используется для хранения и манипулирования интервалами, содержащими годы и месяцы. Точность задает число цифр в поле лет. Нельзя использовать символические константы или переменные для задания точности; Необходимо указать целое литеральное значение в диапазоне от 0 до 4. По умолчанию — 2 |
INTERVAL DAY [(точность1)] TO SECOND [(точность1)] | Используется для хранения и манипулирования интервалами, содержащими дни, часы, минуты и секунды. Точность 1 и Точность 2 определяют соответственно число цифр в поле дней и точность в поле секунд. В обоих случаях нельзя использовать символические константы или переменные для задания точности; Необходимо указать целое литеральное значение в диапазоне от 0 до 9. Значения по умолчанию соответственно -2 и 6 |
Логические: | |
---|---|
BOOLEAN | Основной тип для хранения значений, используемых в логических вычислениях: True (истинно), False(ложно) или NULL (не определено). |
Tags: Скалярные типы данных
Базы данных. Вводный курс
Лекция 17. Общая характеристика оператора SELECT и организация списка ссылок на таблицы в разделе FROM
17.1. Введение
В этой и следующих трех лекциях рассматривается важнейший оператор языка SQL – оператор SELECT , предназначенный для выборки данных из SQL-ориентированной базы данных. Этот оператор имеет довольно сложную и развитую структуру, но, по нашему мнению, его необходимо знать любому специалисту, так или иначе связанному с использованием баз данных; поэтому в нашем курсе ему уделяется так много внимания. Первая лекция носит подготовительный характер. В ней мы рассматриваем виды скалярных выражений, используемые, прежде всего, в конструкциях оператора SELECT , обсуждаем базовую семантику выполнения этого оператора и анализируем принципы и разновидности указания таблиц, из которых производится выборка данных.
Несмотря на то, что язык SQL является полным языком баз данных, включающим множество разнообразных средств определения схемы, ограничения и поддержки целостности базы данных, поддержки администрирования, заполнения и модификации таблиц базы данных, поддержки разработки приложений и т. д., для подавляющего большинства пользователей этот язык остается языком запросов, т. е. языком, позволяющим формулировать произвольно сложные и точные декларативные запросы к базе данных.
Как отмечалось в конце предыдущей лекции, структура стандарта языка SQL фактически не позволяет описать одну часть языка (в частности, средства запросов) в отрыве от других частей. Тем не менее, полагая, что средства выборки данных составляют наиболее интересную и практически значимую часть языка, мы выделили для их рассмотрения несколько отдельных лекций.
Напомним, что в этом курсе мы ограничиваемся базовым подмножеством SQL:1999 и SQL:2003 («прямым SQL») и даже это подмножество описываем не в полном объеме стандарта. Кроме того, в данной лекции мы не будем точно придерживаться порядка введения понятий и синтаксических конструкций, принятого в стандарте языка. Мы начнем с некоторой общей картины, дающей представление об операторе выборки, а затем будем постепенно уточнять ее.
17.2. Скалярные выражения
Скалярное выражение 115) – это выражение, вырабатывающее результат некоторого типа, специфицированного в стандарте. Скалярные выражения являются основой языка SQL, поскольку, хотя это реляционный язык, все условия, элементы списков выборки и т. д. базируются именно на скалярных выражениях. В SQL:1999 имеется несколько разновидностей скалярных выражений. К числу наиболее важных разновидностей относятся численные выражения; выражения со значениями-строками символов; выражения со значениями даты-времени; выражения со значениями-временными интервалами; булевские выражения. Мы не будем слишком глубоко вникать в тонкости, но тем не менее приведем некоторые базовые спецификации и пояснения.
Прежде чем перейти к конкретным видам скалярных выражений, рассмотрим некоторые наиболее общие языковые конструкции, на которых эти выражения базируются.
17.2.1. Общие синтаксические правила построения скалярных выражений
В SQL:2003 имеются девять разновидностей выражений в соответствии с девятью категориями типов данных, значения которых вырабатываются при вычислении выражения
value_expression ::= numeric_value_expression | string_value_expression | datetime_value_expression | interval_value_expression | boolean_value_expression | array_value_expression | multiset_value_expression | row_value_expression | user_defined_value_expression | reference_value_expression
Как уже отмечалось в начале этого раздела, мы ограничимся обсуждением первых пяти разновидностей выражений. В основе построения этих видов выражений лежит первичное выражение, определяемое следующим синтаксическим правилом:
value_expression_primary ::= unsigned_value_specification | column_reference | set_function_specification | scalar_subquery | case_expression | (value_expression) | cast_specification
В пределах этого курса можно считать, что спецификация беззнакового значения ( unsigned_value_specification ) – это всегда литерал соответствующего типа или вызов ниладической функции (например, CURRENT_USER ) 116) . При вычислении выражения V для строки таблицы каждая ссылка на столбец ( column_reference ) этой таблицы, непосредственно содержащаяся в V , рассматривается как ссылка на значение данного столбца в данной строке. Агрегатные функции (функции над множествами – set_function_specification ) обсуждаются в лекции 19. Если первичное выражение является скалярным подзапросом ( scalar_subquery , или подзапросом, результатом которого является таблица, состоящая из одной строки и одного столбца) и результат подзапроса пуст, то результат первичного выражения – неопределенное значение. (Подзапросы обсуждаются в следующей лекции, выражения с переключателем ( case_expression ) рассматриваются ниже в этом разделе.)
17.2.2. Численные выражения
Численное выражение – это выражение, значение которого относится к числовому типу данных. Вот формальный синтаксис численного выражения:
numeric_value_expression> ::= numeric_term | numeric_value_expression + term | numeric_value_expression – term numeric_term ::= numeric_factor | numeric_term * numeric_factor | numeric_term / numeric_factor numeric_factor ::= [ < + | – >] numeric_primary numeric_primary ::= value_expression_primary | numeric_value_function
Следует обратить внимание на то, что в численных выражениях SQL первичная составляющая ( numeric_primary ) является либо первичным выражением (см. выше), либо вызовом функции с численным значением ( numeric_value_function ). Из этого, в частности, следует, что в численные выражения могут входить выражения с переключателем и операции преобразования типов. Вызовы функций с численным значением определяются следующими синтаксическими правилами:
numeric_value_function ::= POSITION (character_value_expression IN character_value_expression) | (string_value_expression) | OCTET_LENGTH (string_value_expression) | BIT_LENGTH (string_value_expression) | EXTRACT ( < datetime_field | time_zone field >FROM < datetime_value_expression | interval_value_expression >) | CARDINALITY (array_value_expression | multiset_value_expression) | ABS (numeric_value_expression) | MOD (numeric_value_expression)
Мы достаточно подробно обсуждали функции определения позиции и длины по отношению к символьным и битовым строкам при рассмотрении соответствующих типов данных; здесь приводится только уточненный синтаксис их вызова. Функция EXTRACT извлечения поля из значений дата-время или интервал позволяет получить в виде точного числа с масштабом 0 значение любого поля (года, месяца, дня и т. д.). Какой конкретный тип точных чисел будет выбран – определяется в реализации. Функции ABS и MOD возвращают абсолютное значение числа и остаток от деления одного целого значения на другое соответственно.
17.2.3. Выражения, значениями которых являются символьные или битовые строки
Выражения символьных и битовых строк – это выражения, значениями которых являются символьные или битовые строки. Соответствующие конструкции определяются следующим синтаксисом:
string_value_expression ::= character_value_expression | bit_value_expression character_value_expression ::= сoncatenation | character_factor concatenation ::= character_value_expression || character_factor character_factor ::= character_primary [ collate_clause ] character_primary ::= value_expression_primary | string_value_function bit_value_expression ::= bit_concatenation | bit_factor bit_concatenation ::= bit_value_expression || bit_primary bit_primary ::= value_expression_primary | string value function
Если не вдаваться в тонкости, смысл выражений символьных и битовых строк понятен из описания синтаксиса: единственная применимая для построения выражений операция – это конкатенация, производящая «склейку» строк-операндов. Более важно то, что первичной составляющей выражения над строками может быть как первичное скалярное выражение (см. выше), так и вызов функций, возвращающих строчные значения. Репертуар и синтаксис вызова таких функций определяются следующими правилами:
string_value_function ::= character_value_function | bit_value_function character _value_function ::= SUBSTRING (character _value_expression FROM start_position [ FOR string_length ]) | SUBSTRING (character _value_expression SIMILAR character _value_expression ESCAPE character_value_expression) | < UPPER | LOWER >(character_value_expression) | CONVERT (character_value_expression USING conversion_name) | TRANSLATE (character_value_expression) USING translation_name) | TRIM ([ ] [ character_value_expression ] [ character_value_expression ]) | OVERLAY (character_value_expression PLACING character_value_expression FROM start_position [ FOR string_length ]) bit _value_function ::= SUBSTRING (bit_value_expression FROM start_position [ FOR string_length ]) start_position ::= numeric_value_expression string length ::= numeric_value_expression
Основные полезные функции – выделение подстроки ( SUBSTRING ) и замена малых букв на заглавные и наоборот ( UPPER и LOWER ) – мы упоминали при рассмотрении типов символьных и битовых строк. Обсуждение функции SUBSTRING . SIMILAR . ESCAPE отложим до следующей лекции. Как видно из описания синтаксиса функций, возвращающих строчные значения, для символьных строк имеются еще четыре функции: CONVERT , TRANSLATE , TRIM и OVERLAY . По смыслу все они очень просты. Функция CONVERT меняет кодировку символов в заданной строке, причем набор символов не меняется. Способ задания правил перекодировки определяется в реализации. Функция TRANSLATE , наоборот, в соответствии с правилами трансляции «переводит» текстовую строку на другой язык (используя набор символов целевого алфавита). Кодировка не меняется. Функция TRIM «отсекает» последовательности указанного символа в начале, в конце или в конце и начале заданной строки. Наконец, функция OVERLAY заменяет указанную подстроку первого операнда строкой, заданной в качестве второго операнда.
17.2.4. Выражения даты-времени
К выражениям даты-времени мы относим выражения, вырабатывающие значения типа дата-время и интервал. Выражения даты-времени определяются следующими синтаксическими правилами:
datetime_value_expression ::= datetime_term | interval_value_expression + datetime term | datetime_value_expression + interval term | datetime value expression – interval term datetime_term ::= datetime_primary [ AT < LOCAL | TIME ZONE interval_value_expression >] datetime_primary ::= value_expression_primary | datetime_value_function
Как видно из описания синтаксиса, сами выражения строятся очень просто – на основе обычных арифметических операций. Снова более интересны первичные составляющие – вызовы функций, возвращающих значение дата-время. Эти вызовы определяются следующим синтаксисом:
datetime_value_function ::= CURRENT_DATE | CURRENT_TIME [ (precision) ] | LOCALTIME [ (precision) ] | CURRENT_TIMESTAMP [ (precision) ] | LOCALTIMESTAMP [ (precision) ]
Видимо, приведенные синтаксические правила не нуждаются в комментариях: можно получить текущую дату, а также текущее время с желаемой точностью. Отличие функций LOCALTIME и LOCALTIMESTAMP от CURRENT_TIME и CURRENT_TIMESTAMP , соответственно, состоит в том, что первая пара функций не возвращает смещение локального времени от Гринвича.
Синтаксис выражений со значениями типа интервал определяется следующими правилами:
interval_value_expression ::= interval_term | interval_value_expression + interval term | interval_value_expression – interval term | (datetime value expression – datetime term) interval_qualifier interval_term ::= interval_factor | interval_term * numeric_factor | interval_term / numeric_factor | numeric_term * interval_factor interval_factor ::= [ < + | – >] interval_primary [ ] interval_primary ::= value_expression_primary | interval_value_function
Как видно из приведенных правил, выражения со значениями типа интервал устроены очень просто; почти вся содержательная информация была приведена при обсуждении соответствующего типа данных. Стоит только заметить, что квалификатор интервала указывается для того, чтобы явно специфицировать единицу измерения интервала. Поддерживается только одна функция ABS (абсолютное значение), аргументом которой является выражение со значением типа интервал.
17.2.5. Булевские выражения
К булевским выражениям относятся выражения, вырабатывающие значения булевского типа (напомним, что булевский тип языка SQL содержит три логических значения – true , false и unknown ). Булевские выражения определяются следующими синтаксическими правилами:
boolean_value_expression ::= boolean_term | boolean_value_expression OR boolean_term boolean_term ::= boolean_factor | boolean_term AND boolean_factor boolean_factor ::= [ NOT ] boolean_test boolean_test ::= boolean_primary [ IS [ NOT ] truth_value ] truth_value ::= TRUE | FALSE | UNKNOWN boolean_primary ::= predicate | (boolean_value_expression) | value_expression_primary
Выражения вычисляются слева направо с учетом приоритетов операций (наиболее высокий приоритет имеет унарная операция NOT , следующим уровнем приоритета обладает «мультипликативная» операция конъюнкции AND , и самый низкий приоритет у «аддитивной» операции дизъюнкции OR ) и круглых скобок. Операции IS и IS NOT определяются следующими таблицами истинности:
IS | TRUE | FALSE | UNKNOWN |
---|---|---|---|
TRUE | TRUE | FALSE | FALSE |
FALSE | FALSE | TRUE | FALSE |
UNKNOWN | FALSE | FALSE | TRUE |
IS NOT | TRUE | FALSE | UNKNOWN |
---|---|---|---|
TRUE | FALSE | TRUE | TRUE |
FALSE | TRUE | FALSE | TRUE |
UNKNOWN | TRUE | TRUE | FALSE |
17.2.6. Выражения с переключателем
Выражения с переключателем в некотором смысле ортогональны рассмотренным выше видам выражений, поскольку разные выражения с переключателем могут вырабатывать значения разных типов в зависимости от типа данных элементов. Поскольку мы еще вообще не рассматривали этот вид выражений, обсудим их более подробно. Как обычно, начнем с синтаксиса:
case_expression ::= case_abbreviation | case_specification case_abbreviation ::= NULLIF (value_expression , value_expression) | COALESCE (value_expression_comma_list) case specification ::= simple_case | searched_case simple_case ::= CASE value_expression simple_when_clause_list [ ELSE value_expression ] END searched_case ::= CASE searched_when_clause_list [ ELSE value_expression ] END simple_when_clause ::= WHEN value_expression THEN value_expression searched_when_clause ::= WHEN conditional_expression THEN value_expression
Наиболее общим видом выражения с переключателем является выражение с поисковым переключателем ( searched_case ). Правила вычисления выражений этого вида состоят в следующем. Вычисляется логическое выражение, указанное в первом разделе WHEN списка ( searched_when_clause_list ). Если значение этого логического выражения равняется true, то значением всего выражения с поисковым переключателем является значение выражения, указанного в первом разделе WHEN после ключевого слова THEN . Иначе аналогичные действия производятся для второго раздела WHEN и т. д. Если ни для одного раздела WHEN при вычислении логического выражения не было получено значение true, то значением всего выражения с поисковым переключателем является значение выражения, указанного в разделе ELSE . Типы всех выражений, значения которых могут являться результатом выражения с поисковым переключателем, должны быть совместимыми, и типом результата является «наименьший общий» тип набора типов выражений-кандидатов на выработку результата 117) . Если в выражении отсутствует раздел ELSE , предполагается наличие раздела ELSE NULL .
В выражении с простым переключателем ( simple_case ) тип данных операнда переключателя (выражения, непосредственно следующего за ключевым словом CASE , назовем его CO – Case Operand ) должен быть совместим с типом данных операнда каждого варианта (выражения, непосредственно следующего за ключевым словом WHEN ; назовем WO – When Operand ). Выражение с простым переключателем
CASE CO WHEN WO1 THEN result1 WHEN WO2 THEN result2 . . . . . . . WHEN WOn THEN resultn ELSE result END
эквивалентно выражению с поисковым переключателем
CASE WHEN CO = WO1 THEN result1 WHEN CO = WO2 THEN result2 . . . . . . . WHEN CO = WOn THEN resultn ELSE result END
Выражение NULLIF (V1, V2) эквивалентно следующему выражению с переключателем:
CASE WHEN V1 = V2 THEN NULL ELSE V1 END.
Выражение COALESCE (V1, V2) эквивалентно следующему выражению с переключателем:
CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END.
Выражение COALESCE (V1, V2, . . . Vn) для n 3 эквивалентно следующему выражению с переключателем:
CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2. n) END.
115 В стандарте языка SQL в качестве общего термина для обозначения таких выражений используется термин value expression . Однако в менее формальных публикациях обычно применяется более понятный термин scalar expression , для которого, вдобавок, существует адекватный русский эквивалент скалярное выражение. В этом курсе мы также предпочитаем использовать именно этот термин.
116 Другие варианты появляются во встраиваемом и динамическом SQL, а также расширении языка, предназначенного для написания кода хранимых процедур, триггеров, методов определяемых пользователями типов и т.д. В любом случае беззнаковое значение известно до начала компиляции любой содержащей его конструкции языка SQL.
117 Для набора типов T1 , T2 , …, Tn , будем называть тип T , если значения каждого из типов T1 , T2 , …, Tn неявно приводимы к типу T , и не существует типа T’ , такого, что значения типов T1 , T2 , …, Tn неявно приводимы к типу T’ , и значения типа T’ неявно приводимы к типу T .
- 17.11 — Apple добавит поддержку современного протокола для СМС в iOS в 2024 году — она давно есть у Android
- 17.11 — SpaceX заверила регулятора, что Starlink не создаст помех наземным сотовым сетям
- 17.11 — Суд оштрафовал издателя PUBG Mobile на 1 млн рублей за нарушение закона о локализации данных россиян
- 17.11 — Microsoft подтвердила скорое появление ИИ-помощника Copilot в Windows 10
- 17.11 — Alibaba потеряла $21 млрд стоимости из-за отказа от отделения облачного бизнеса
- 16.11 — Microsoft и Synopsys создали ИИ, который поможет разрабатывать процессоры
- 16.11 — «Яндекс Карты» будут показывать больше подробностей о городе
- 16.11 — В Швейцарии создали первый процессор на 2D-транзисторах, которому не нужна внешняя память
- 16.11 — Первые устройства с беспроводной зарядкой Qi2 вот-вот выйдут на рынок — сертификация почти завершена
- 15.11 — Китай запустил самый быстрый в мире интернет — 1,2 Тбит/с и это втрое быстрее, чем у США
- 15.11 — Запущены суперкомпьютеры Dawn, SuperMUC-NG и Crossroads на базе Intel Data Center GPU Max и Xeon Sapphire Rapids
- 15.11 — Aurora на базе Intel стал вторым мощнейшим суперкомпьютером в мире — лидером остался вдвое более мощный Frontier на AMD
- 15.11 — Создан ИИ, который превращает 2D-изображение в 3D-модель за пять секунд
- 15.11 — Найдена уязвимость, через которую любой процессор Intel можно заставить сбоить
- 10.11 — Apple, Google, Samsung и прочие создадут стандарт умных замков и цифровых ключей Aliro
- 10.11 — Samsung и Google представили бесплатную технологию IAMF для революции в домашнем пространственном звуке
- 10.11 — Индия станет крупнейшим центром разработки ПО в мире к 2027 году
- 10.11 — NASA испытало самый мощный электроракетный двигатель в истории — его применят на лунной орбитальной станции
- 08.11 — Релиз дистрибутива Fedora Linux 39
- 08.11 — Apple остановила разработку iOS 18 и других новых ОС, чтобы исправить накопившиеся ошибки