Содержание

Типы данных (Transact-SQL) — SQL Server

  • Чтение занимает 2 мин

В этой статье

Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data Warehouse

В SQL ServerSQL Server у каждого столбца, локальной переменной, выражения и параметра есть определенный тип данных. In SQL ServerSQL Server, each column, local variable, expression, and parameter has a related data type. Тип данных — атрибут, определяющий, какого рода данные могут храниться в объекте: целые числа, символы, данные денежного типа, метки времени и даты, двоичные строки и так далее.A data type is an attribute that specifies the type of data that the object can hold: integer data, character data, monetary data, date and time data, binary strings, and so on.

SQL ServerSQL Server предоставляет набор системных типов данных, определяющих все типы данных, которые могут использоваться в SQL ServerSQL Server.supplies a set of system data types that define all the types of data that can be used with SQL ServerSQL Server. В Transact-SQLTransact-SQL или MicrosoftMicrosoft .NET Framework.NET Framework можно также определять собственные типы данных.You can also define your own data types in Transact-SQLTransact-SQL or the MicrosoftMicrosoft .NET Framework.NET Framework. Псевдонимы типов данных основываются на системных типах.

Alias data types are based on the system-supplied data types. Дополнительные сведения о псевдонимах типов данных см. в статье CREATE TYPE (Transact-SQL).For more information about alias data types, see CREATE TYPE (Transact-SQL). Определяемые пользователем типы данных обладают свойствами, зависящими от методов и операторов класса, который создается для них на одном из языков программирования, которые поддерживаются .NET Framework.NET Framework.User-defined types obtain their characteristics from the methods and operators of a class that you create by using one of the programming languages support by the .NET Framework.NET Framework.

При объединении одним оператором двух выражений с разными типами данных, параметрами сортировки, точностями, масштабами или длинами, результат определяется следующим образом.When two expressions that have different data types, collations, precision, scale, or length are combined by an operator, the characteristics of result are determined by the following:

  • Тип данных результата определяется применением правил очередности типов данных к входным выражениям.
    The data type of the result is determined by applying the rules of data type precedence to the data types of the input expressions. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).For more information, see Data Type Precedence (Transact-SQL).
  • Параметры сортировки результата определяются правилами очередности параметров сортировки, если тип данных результата — char, varchar, text, nchar, nvarchar или
    ntext
    .The collation of the result is determined by the rules of collation precedence when the result data type is char, varchar, text, nchar, nvarchar, or ntext. Дополнительные сведения см. в статье Очередность параметров сортировки (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).
  • Точность, масштаб и длина результата зависят от точности, масштаба и длины входных выражений. The precision, scale, and length of the result depend on the precision, scale, and length of the input expressions. Дополнительные сведения см. в разделе Точность, масштаб и длина (Transact-SQL).For more information, see Precision, Scale, and Length (Transact-SQL).

SQL ServerSQL Server предоставляет синонимы типов данных для совместимости со стандартом ISO.provides data type synonyms for ISO compatibility. Дополнительные сведения см. в статье Синонимы типов данных (Transact-SQL).For more information, see Data Type Synonyms (Transact-SQL).

Категории типов данныхData type categories

Типы данных в SQL ServerSQL Server объединены в следующие категории:Data types in SQL ServerSQL Server are organized into the following categories:

Точные числаExact numerics

Символьные строки в ЮникодеUnicode character strings

Приблизительные числаApproximate numerics

Двоичные данныеBinary strings

Дата и времяDate and time

Прочие типы данныхOther data types

Символьные строкиCharacter strings

В зависимости от параметров хранения, некоторые типы данных в SQL ServerSQL Server относятся к следующим группам:In SQL ServerSQL Server, based on their storage characteristics, some data types are designated as belonging to the following groups:

  • Типы данных больших значений: varchar(max) и nvarchar(max)Large value data types: varchar(max), and

    nvarchar(max)

  • Типы данных больших объектов: text, ntext, image, varbinary(max) и xmlLarge object data types: text, ntext, image, varbinary(max), and xml

    Примечание

    Хранимая процедура sp_help возвращает -1 в качестве значения длины для типов данных большого объема и xml. sp_help returns -1 as the length for the large-value and xml data types.

Точные числаExact numerics

Приблизительные числаApproximate numerics

Дата и времяDate and time

Символьные строкиCharacter strings

Символьные строки в ЮникодеUnicode character strings

Двоичные данныеBinary strings

Прочие типы данныхOther data types

См. также разделSee also

CREATE PROCEDURE (Transact-SQL)CREATE PROCEDURE (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL) EXECUTE (Transact-SQL)DECLARE @local_variable (Transact-SQL) EXECUTE (Transact-SQL)
Выражения (Transact-SQL)Expressions (Transact-SQL)
Функции (Transact-SQL)Functions (Transact-SQL)
LIKE (Transact-SQL)LIKE (Transact-SQL)
sp_droptype (Transact-SQL)sp_droptype (Transact-SQL)
sp_help (Transact-SQL)sp_help (Transact-SQL)
sp_rename (Transact-SQL)sp_rename (Transact-SQL)

Числовые типы данных

Числа могут храниться в целом и десятичном форматах, а также в формате с плавающей запятой. Особенностью десятичных чисел является то, что они хранятся в целочисленном виде с указанием точного количества цифр после запятой. Числа с плавающей запятой вычисляются приблизительно, с той или иной точностью.

Целые числа
В представленной ниже таблице перечислены целочисленные типы данных и соответствующие им диапазоны значений. Числа, выходящие за пределы диапазона, преобразуются в минимальное или максимальное допустимое значение.

Тип Знаковый диапазон Беззнаковый диапазон
(Только в в MySQL)
TINYINT [(M)] -27 ÷ 27-1 (MySQL)
0 ÷ 28-1 (MS SQL)
0 ÷ 28-1
SMALLINT[(M)] -215 ÷ 215-1 0 ÷ 216-1
INT[(M)] -231 ÷ 231-1 0 ÷ 233-1
BIGINT[(M)] -263 ÷ 263-1 0 ÷ 264-1

Синтаксис спецификации целочисленного типа таков:

col_type ([M]) [UNSIGNED] [ZEROFILL] (Атрибуты UNSIGNED, ZEROFILL поддерживаются только в MySQL)

Как минимум, нужно указать имя типа. Следом за ним в скобках приводится требуемая размерность. (Как правило, размерность не играет никакой роли для числовых столбцов. Более крупные значения принимаются и отображаются правильно.)

Атрибут UNSIGNED обозначает беззнаковое число и исключает появление отрицательных величин. Начальным значением для такого типа будет значение 0.

Атрибут ZEROFILL говорит о том, что в случае необходимости число должно быть дополнено ведущими нулями до нужной размерности. Например, для столбца, объявленного как INT(5) ZEROFILL, величина 4 извлекается как 00004.

Числа с плавающей запятой
Числа с плавающей запятой представляют собой приблизительные значения. Они подходят для столбцов, где хранятся дробные величины или числа, выходящие за пределы самого крупного целочисленного диапазона (BIGINT). Имеются два типа чисел с плавающей запятой: числа одинарной точности (FLOAT) и числа двойной точности (DOUBLE PRECISION, REAL).

Синтаксис спецификации типа с плавающей запятой таков:

col_type ([M]) [ZEROFILL] (Атрибут ZEROFILL поддерживаются только в MySQL)

Значение параметра M (размерность) должно лежать в пределах от 1 до 53. Значением по умолчанию является 53.

Десятичные числа
Десятичные числа имеют фиксированное количество цифр после запятой. Эти цифры вычисляются точно, в отличие от чисел с плавающей запятой и в действительности значения данного типа хранятся в виде строк и при этом для каждого десятичного знака используется один символ.

Синтаксис спецификации для десятичного типа таков:

DECIMAL[(M[,D])] NUMERIC [(M[,D])]

Атрибут M определяет размерность, а атрибут D — точность (количество цифр после запятой). Если атрибут D равен 0, величины будут представлены без десятичного знака, т.е. без дробной части. Максимальное значение атрибута М равно 65. В случае размерности 6 и точности 2 допустимый диапазон значений будет таким: -9999,99 — 9999,99.

Типы данных Microsoft SQL Server

Полный список всех типов данных в Microsoft SQL Server

Заголовки:

Источники

Приоритет типов данных (Transact-SQL)

Если оператор связывает два выражения различных типов данных, то по правилам приоритета типов данных определяется, какой тип данных имеет меньший приоритет и будет преобразован в тип данных с большим приоритетом. Если неявное преобразование не поддерживается, возвращается ошибка. Если оба операнда выражения имеют одинаковый тип данных, результат операции будет иметь тот же тип данных.

В SQL Server используется следующий приоритет типов данных:

  1. sql_variant
  2. xml
  3. datetimeoffset
  4. datetime2
  5. datetime
  6. smalldatetime
  7. date
  8. time
  9. float
  10. real
  11. decimal
  12. money
  13. smallmoney
  14. bigint
  15. int
  16. smallint
  17. tinyint
  18. bit
  19. ntext
  20. text
  21. image
  22. timestamp
  23. uniqueidentifier
  24. nvarchar (including nvarchar(max) )
  25. nchar
  26. varchar (including varchar(max) )
  27. char
  28. varbinary (including varbinary(max) )
  29. binary (lowest)

Синонимы типов данных (Transact-SQL)

Синонимы типов данных включены в SQL Server ради совместимости со спецификацией ISO. Эти синонимы и соответствующие им системные типы данных SQL Server приведены в следующей таблице.

СинонимСистемный тип данных SQL Server
Binary varyingvarbinary
char varyingvarchar
characterchar
characterchar(1)
character(n)char(n)
character varying(n)varchar(n)
Decdecimal
Double precisionfloat
float[(n)] for n = 1-7real
float[(n)] for n = 8-15float
integerint
national character(n)nchar(n)
national char(n)nchar(n)
national character varying(n)nvarchar(n)
national char varying(n)nvarchar(n)
national textntext
timestamprowversion

Синонимы типов данных можно использовать вместо соответствующих базовых типов данных в инструкциях языка определения данных (data definition language, DDL), таких как CREATE TABLE, CREATE PROCEDURE или DECLARE @variable. Однако после создания объекта синонимы утрачивают силу. При создании объекта ему назначается базовый тип данных, связанный с синонимом. Никаких признаков того, что в инструкции, создавшей объект, был указан синоним, не остается.

Всем объектам, производным от первоначального объекта, таким, как столбцы результирующего набора или выражения, назначается базовый тип данных. Все последующие вызовы функций работы с метаданными, выполняемые для первоначального объекта и любых производных от него объектов, сообщают базовый тип данных, а не синоним. Это имеет место при работе с метаданными, например в процедуре sp_help и других системных хранимых процедурах, представлениях информационных схем и различных API-операции над метаданными, сообщающих типы данных столбцов таблицы или результирующего набора.

Точность, масштаб и длина (Transact-SQL)

Точность представляет собой количество цифр в числе. Масштаб представляет собой количество цифр справа от десятичной запятой в числе. Например: число 123,45 имеет точность 5 и масштаб 2.

В среде SQL Server максимальная точность типов данных numeric и decimal по умолчанию составляет 38 разрядов. В более ранних версиях SQL Server максимум по умолчанию составляет 28.

Длиной для числовых типов данных является количество байт, используемых для хранения числа. Длина символьной строки или данных в Юникоде равняется количеству символов. Длина для типов данных binary, varbinary и image равна количеству байт. Например, тип данных int может содержать 10 разрядов, храниться в 4 байтах и не должен содержать десятичный разделитель. Тип данных int имеет точность 10, длину 4 и масштаб 0.

При сцеплении двух выражений типа char, varchar, binary или varbinary длина результирующего выражения является суммой длин двух исходных выражений, но не превышает 8 000 символов.

При сцеплении двух выражений типа nchar или nvarchar длина результирующего выражения является суммой длин двух исходных выражений, но не превышает 4 000 символов.

Если два выражения одного и того же типа данных, но разной длины, сравниваются с помощью предложения UNION, EXCEPT или INTERSECT, длина результата будет равняться длине максимального из двух выражений.

Точность и масштаб числовых типов данных, кроме decimal, фиксированы. Если арифметический оператор объединяет два выражения одного и того же типа, результат будет иметь тот же тип данных с точностью и масштабом, определенными для этого типа. Если оператор объединяет два выражения с различными числовыми типами данных, тип данных результата будет определяться правилами старшинства типов данных. Результат имеет точность и масштаб, определенные для этого типа данных.

Следующая таблица определяет, как вычисляется точность и масштаб результата, если результат операции имеет тип decimal. Результат имеет тип decimal, если одно из следующих утверждений является истиной:

  • Оба выражения имеют тип decimal.
  • Одно выражение имеет тип decimal, а другое имеет тип данных со старшинством меньше, чем decimal.

Выражения операндов обозначены как выражение e1 с точностью p1 и масштабом s1 и выражение e2 с точностью p2 и масштабом s2. Точность и масштаб для любого выражения, отличного от decimal, соответствуют типу данных этого выражения

ОперацияТочность результатаМасштаб результата *
e1 + e2max(s1, s2) + max(p1-s1, p2-s2) + 1max(s1, s2)
e1 — e2max(s1, s2) + max(p1-s1, p2-s2) + 1max(s1, s2)
e1 * e2p1 + p2 + 1s1 + s2
e1 / e2p1 — s1 + s2 + max(6, s1 + p2 + 1)max(6, s1 + p2 + 1)
e1 { UNION | EXCEPT | INTERSECT } e2max(s1, s2) + max(p1-s1, p2-s2)max(s1, s2)
e1 % e2min(p1-s1, p2 -s2) + max( s1,s2 )max(s1, s2)

* Точность и масштаб результата имеют абсолютный максимум, равный 38. Если значение точности превышает 38, то соответствующее значение масштаба уменьшается, чтобы по возможности предотвратить усечение целой части результата.

SQL Server, SSIS и Biml типы данных

Таблица ниже является упрощенной схемой связи между типами данныхSQL Server, SSIS и Biml. Таблица не включает все возможные комбинации и все виды типов данных, но полезна как быстрая ссылка при разработке и изучении Biml.

SQL ServerSSIS VariablesSSIS Pipeline BufferOLE DBADO.NETBiml
bigintInt64DT_I8LARGE_INTEGERInt64Int64
binaryObjectDT_BYTESBinaryBinary
bitBooleanDT_BOOLVARIANT_BOOLBooleanBoolean
charStringDT_STRVARCHARStringFixedLengthAnsiStringFixedLength
dateObjectDT_DBDATEDBDATEDateDate
datetimeDateTimeDT_DBTIMESTAMPDATEDateTimeDateTime
datetime2ObjectDT_DBTIMESTAMP2DBTIME2DateTime2DateTime2
datetimeoffsetObjectDT_DBTIMESTAMPOFFSETDBTIMESTAMPOFFSETDateTimeOffsetDateTimeOffset
decimalDecimalDT_NUMERICNUMERICDecimalDecimal
floatDoubleDT_R8FLOATDoubleDouble
geographyDT_IMAGEObjectObject
geometryDT_IMAGEObjectObject
hierarchyidDT_BYTESObjectObject
image (*)ObjectDT_IMAGEBinaryBinary
intInt32DT_I4LONGInt32Int32
moneyObjectDT_CY, DT_NUMERICCURRENCYCurrencyCurrency
ncharStringDT_WSTRNVARCHARStringFixedLengthStringFixedLength
ntext (*)StringDT_NTEXTStringString
numericDecimalDT_NUMERICNUMERICDecimalDecimal
nvarcharStringDT_WSTRNVARCHARStringString
nvarchar(max)ObjectDT_NTEXTString
realSingleDT_R4FLOAT, DOUBLESingleSingle
rowversionObjectDT_BYTESBinaryBinary
smalldatetimeDateTimeDT_DBTIMESTAMPDATEDateTimeDateTime
smallintInt16DT_I2SHORTInt16Int16
smallmoneyObjectDT_CY, DT_NUMERICCURRENCYCurrencyCurrency
sql_variantObjectDT_WSTR, DT_NTEXTObjectObject
tableObject
text (*)ObjectDT_TEXTAnsiString
timeObjectDT_DBTIME2DBTIME2TimeTime
timestamp (*)ObjectDT_BYTESBinaryBinary
tinyintByteDT_UI1BYTEByteByte
uniqueidentifierString, ObjectDT_GUIDGUIDGuidGuid
varbinaryObjectDT_BYTESBinaryBinary
varbinary(max)ObjectDT_IMAGEBinaryBinary
varcharStringDT_STRVARCHARStringAnsiString
varchar(max)ObjectDT_TEXTAnsiString
xmlObjectDT_NTEXTXml

(* Данные типы данных будут удалены в будущих версиях SQL Server. 38 -1Exact Numericssmallmoney4-214 748.3648 to 214 748.3647Exact Numericsmoney8-922 337 203 685 477.5808 to 922 337 203 685 477.5807Approximate Numericsfloat1-24
25-537
154
8-3.40E+38 to -1.18E-38, 0 and 1.18E-38 to 3.40E+38
-1.79E+308 to -2.23E-308, 0 and 2.23E-308 to 1.79E+308Date and Timedate30001-01-01 through 9999-12-31
January 1, 1 CE through December 31, 9999 CEDate and Timesmalldatetime41900-01-01 through 2079-06-06
January 1, 1900 through June 6, 2079
00:00:00 through 23:59:59Date and Timetime8-11
12-13
14-163
4
500:00:00.0000000 through 23:59:59.9999999Date and Timedatetime21-2
3-4
5-76
7
80001-01-01 through 9999-12-31
January 1, 1 CE through December 31, 9999 CE
00:00:00 through 23:59:59. 31 — 1)n + 2Other Data TypescursorOther Data Typessql_variantmax 8016Other Data Typeshierarchyidmax 892Other Data Typesrowversion8Other Data Typestimestamp(*)Other Data Typesuniqueidentifier16Other Data Typesxmlmax 2GbOther Data TypestableSpatial Data TypesgeometrySpatial Data Typesgeography

SQL Server to MySQL, Oracle, PostgreSQL, SQLite Data Type Mapping

General TypeTypeMySQLOraclePostgreSQLSQLite
Exact NumericsbitTINYINT(1)NUMBER(3)BOOLEANINTEGER
Exact NumericstinyintTINYINT(signed)NUMBER(3)SMALLINTINTEGER
Exact NumericssmallintSMALLINTNUMBER(5)SMALLINTINTEGER
Exact NumericsintMEDIUMINT, INTNUMBER(10)INTINTEGER
Exact NumericsbigintBIGINTNUMBER(19)BIGINTINTEGER
Exact NumericsdecimalDECIMALNUMBER(p[,s])DECIMAL(p,s)REAL
Exact NumericssmallmoneyDOUBLENUMBER(10,4)MONEYREAL
Exact NumericsmoneyDOUBLENUMBER(19,4)MONEYREAL
Approximate NumericsfloatFLOAT
DOUBLE; REAL
FLOAT(49)DOUBLE PRECISIONREAL
Date and TimedateDATEDATETEXT
Date and TimesmalldatetimeTIMESTAMPDATETIMESTAMP(0)TEXT
Date and TimetimeTIMETIMETEXT
Date and Timedatetime2DDATETIMETIMESTAMPTEXT
Date and TimedatetimeDATETIMESTAMP(3)TEXT
Date and timedatetimeoffsetTIMESTAMP
with time zone
TEXT
Caracter StringscharCHARCHARCHARTEXT
Caracter StringsvarcharVARCHARVARCHAR2VARCHARTEXT
Caracter Stringsvarchar(max)VARCHAR2TEXTTEXT
Caracter StringsncharNCHARNCHARTEXT
Caracter StringsnvarcharNCHARVARCHARTEXT
Caracter Stringsnvarchar(max)VARCHAR
TINYTEXT
TEXT(M)
MEDIUMTEXT
LONGTEXT
NCHARTEXTTEXT
Caracter Stringsntext(*)LONGTEXTTEXT
Caracter Stringstext(*)LONGTEXTTEXT
Binary Stringsimage(*)LONGBLOBLONG RAWBYTEABLOB
Binary StringsbinaryBINARYRAWBYTEABLOB
Binary StringsvarbinaryRAWBYTEABLOB
Binary Stringsvarbinary(max)VARBINARY(M)
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
RAWBYTEABLOB
Other Data TypescursorTEXT
Other Data Typessql_variantBLOBTEXT
Other Data TypeshierarchyidTEXT
Other Data TypesrowversionBYTEATEXT
Other Data Typestimestamp(*)RAWBYTEATEXT
Other Data TypesuniqueidentifierCHARCHAR(36)CHAR(16)TEXT
Other Data TypesxmlXMLTEXT
Other Data Typestable
Spatial Data TypesgeometryVARCHARTEXT
Spatial Data TypesgeographyVARCHARTEXT

(* Данные типы данных будут удалены в будущих версиях SQL Server. Избегайте использование этих типов данных в новых проектах и, по возможности, измените их в текущих проектах.)

БД

Типы данных языка SQL, определенные стандартом

Данные – это совокупная информация, хранимая в базе данных в виде одного из нескольких различных типов. С помощью типов данных устанавливаются основные правила для данных, содержащихся в конкретном столбце таблицы, в том числе размер выделяемой для них памяти.

В языке SQL имеется шесть скалярных типов данных, определенных стандартом. Их краткое описание представлено в таблице.

Таблица 2.1.
Тип данных Объявления
Символьный CHAR | VARCHAR
Битовый BIT | BIT VARYING
Точные числа NUMERIC | DECIMAL | INTEGER | SMALLINT
Округленные числа FLOAT | REAL | DOUBLE PRECISION
Дата/время DATE | TIME | TIMESTAMP
Интервал INTERVAL
Символьные данные

Символьные данные состоят из последовательности символов, входящих в определенный создателями СУБД набор символов. Поскольку наборы символов являются специфическими для различных диалектов языка SQL, перечень символов, которые могут входить в состав значений данных символьного типа, также зависит от конкретной реализации. Чаще всего используются наборы символов ASCII и EBCDIC. Для определения данных символьного типа используется следующий формат:

<символьный_тип>::=
{ CHARACTER [ VARYING][длина] | [CHAR | 
VARCHAR][длина]}

При определении столбца с символьным типом данных параметр длина применяется для указания максимального количества символов, которые могут быть помещены в данный столбец (по умолчанию принимается значение 1). Символьная строка может быть определена как имеющая фиксированную или переменную (VARYING) длину. Если строка определена с фиксированной длиной значений, то при вводе в нее меньшего количества символов значение дополняется до указанной длины пробелами, добавляемыми справа. Если строка определена с переменной длиной значений, то при вводе в нее меньшего количества символов в базе данных будут сохранены только введенные символы, что позволит достичь определенной экономии внешней памяти.

Битовые данные

Битовый тип данных используется для определения битовых строк, т.е. последовательности двоичных цифр (битов), каждая из которых может иметь значение либо 0, либо 1. Данные битового типа определяются при помощи следующего формата:

<битовый_тип>::=
BIT [VARYING][длина]
Точные числа

Тип точных числовых данных применяется для определения чисел, которые имеют точное представление, т.е. числа состоят из цифр, необязательной десятичной точки и необязательного символа знака. Данные точного числового типа определяются точностью и длиной дробной части. Точность задает общее количество значащих десятичных цифр числа, в которое входит длина как целой части, так и дробной, но без учета самой десятичной точки. Масштаб указывает количество дробных десятичных разрядов числа.

<фиксированный_тип>::=
{NUMERIC[точность[,масштаб]|{DECIMAL|DEC}
   [точность[, масштаб]
| {INTEGER |INT}| SMALLINT}

Типы NUMERIC и DECIMAL предназначены для хранения чисел в десятичном формате. По умолчанию длина дробной части равна нулю, а принимаемая по умолчанию точность зависит от реализации. Тип INTEGER (INT) используется для хранения больших положительных или отрицательных целых чисел. Тип SMALLINT – для хранения небольших положительных или отрицательных целых чисел; в этом случае расход внешней памяти существенно сокращается.

Округленные числа

Тип округленных чисел применяется для описания данных, которые нельзя точно представить в компьютере, в частности действительных чисел. Округленные числа или числа с плавающей точкой представляются в научной нотации, при которой число записывается с помощью мантиссы, умноженной на определенную степень десяти (порядок), например: 10Е3, +5.2Е6, -0.2Е-4. Для определения данных вещественного типа используется формат:

<вещественный_тип>::=
{ FLOAT [точность]| REAL |
   DOUBLE PRECISION}

Параметр точность задает количество значащих цифр мантиссы. Точность типов REAL и DOUBLE PRECISION зависит от конкретной реализации.

Дата и время

Тип данных «дата/время» используется для определения моментов времени с некоторой установленной точностью. Стандарт SQL поддерживает следующий формат:

<тип_даты/времени>::=
{DATE | TIME[точность][WITH TIME ZONE]| 
   TIMESTAMP[точность][WITH TIME ZONE]}

Тип данных DATE используется для хранения календарных дат, включающих поля YEAR (год), MONTH (месяц) и DAY (день). Тип данных TIME – для хранения отметок времени, включающих поля HOUR (часы), MINUTE (минуты) и SECOND (секунды). Тип данных TIMESTAMP – для совместного хранения даты и времени. Параметр точность задает количество дробных десятичных знаков, определяющих точность сохранения значения в поле SECOND. Если этот параметр опускается, по умолчанию его значение для столбцов типа TIME принимается равным нулю (т.е. сохраняются целые секунды), тогда как для полей типа TIMESTAMP он принимается равным 6 (т. е. отметки времени сохраняются с точностью до миллисекунд). Наличие ключевого слова WITH TIME ZONE определяет использование полей TIMEZONE HOUR и TIMEZONE MINUTE, тем самым задаются час и минуты сдвига зонального времени по отношению к универсальному координатному времени (Гринвичскому времени).

Данные типа INTERVAL используются для представления периодов времени.

Понятие домена

Домен – это набор допустимых значений для одного или нескольких атрибутов. Если в таблице базы данных или в нескольких таблицах присутствуют столбцы, обладающие одними и теми же характеристиками, можно описать тип такого столбца и его поведение через домен, а затем поставить в соответствие каждому из одинаковых столбцов имя домена. Домен определяет все потенциальные значения, которые могут быть присвоены атрибуту.

Стандарт SQL позволяет определить домен с помощью следующего оператора:

<определение_домена>::=
   CREATE DOMAIN имя_домена [AS]
      тип_данных
   [ DEFAULT значение]
   [ CHECK (допустимые_значения)]

Каждому создаваемому домену присваивается имя, тип данных, значение по умолчанию и набор допустимых значений. Следует отметить, что приведенный формат оператора является неполным. Теперь при создании таблицы можно указать вместо типа данных имя домена.

Удаление доменов из базы данных выполняется с помощью оператора:

DROP DOMAIN имя_домена [ RESTRICT |
   CASCADE]

В случае указания ключевого слова CASCADE любые столбцы таблиц, созданные с использованием удаляемого домена, будут автоматически изменены и описаны как содержащие данные того типа, который был указан в определении удаляемого домена.

Альтернативой доменам в среде SQL Server являются пользовательские типы данных.

Типы данных, используемые в SQL-сервере

Системные типы данных

Один из основных моментов процесса создания таблицы – определение типов данных для ее полей. Тип данных поля таблицы определяет тип информации, которая будет размещаться в этом поле. Понятие типа данных в SQL Server полностью адекватно понятию типа данных в современных языках программирования. SQL-сервер поддерживает большое число различных типов данных: текстовые, числовые, двоичные (см. таблицу 2.2).

Таблица 2.2.
image smalldatetime bit binary
text real decimal char
uniqueidentifier money numeric timestamp
tinyint datetime smallmoney nvarchar
smallint float varbinary nchar
int ntext varchar sysname

Приведем краткий обзор типов данных SQL Server.

Для хранения символьной информации используются символьные типы данных, к которым относятся CHAR (длина), VARCHAR (длина), NCHAR (длина), NVARCHAR (длина). Последние два предназначены для хранения символов Unicode. Максимальное значение длины ограничено 8000 знаками (4000 – для символов Unicode).

Хранение символьных данных большого объема (до 2 Гб) осуществляется при помощи текстовых типов данных TEXT и NTEXT.

К целочисленным типам данных относятся INT (INTEGER), SMALLINT, TINYINT, BIGINT. Для хранения данных целочисленного типа используется, соответственно, 4 байта (диапазон от -231 до 231-1), 2 байта (диапазон от -215 до 215-1), 1 байт (диапазон от 0 до 255) или 8 байт (диапазон от -263 до 263-1). Объекты и выражения целочисленного типа могут применяться в любых математических операциях.

Числа, в составе которых есть десятичная точка, называются нецелочисленными. Нецелочисленные данные разделяются на два типа – десятичные и приблизительные.

К десятичным типам данных относятся типы DECIMAL [(точность[,масштаб])] или DEC и NUMERIC [(точность[,масштаб])]. Типы данных DECIMAL и NUMERIC позволяют самостоятельно определить формат точности числа с плавающей запятой. Параметр точность указывает максимальное количество цифр вводимых данных этого типа (до и после десятичной точки в сумме), а параметр масштаб – максимальное количество цифр, расположенных после десятичной точки. В обычном режиме сервер позволяет вводить не более 28 цифр, используемых в типах DECIMAL и NUMERIC (от 2 до 17 байт).

К приблизительным типам данных относятся FLOAT (точность до 15 цифр, 8 байт) и REAL (точность до 7 цифр, 4 байта). Эти типы представляют данные в формате с плавающей запятой, т.е. для представления чисел используется мантисса и порядок, что обеспечивает одинаковую точность вычислений независимо от того, насколько мало или велико значение.

Для хранения информации о дате и времени предназначены такие типы данных, как DATETIME и SMALLDATETIME, использующие для представления даты и времени 8 и 4 байта соответственно.

Типы данных MONEY и SMALLMONEY делают возможным хранение информации денежного типа; они обеспечивают точность значений до 4 знаков после запятой и используют 8 и 4 байта соответственно.

Тип данных BIT позволяет хранить один бит, который принимает значения 0 или 1.

В среде SQL Server реализован ряд специальных типов данных.

Тип данных TIMESTAMP применяется в качестве индикатора изменения версии строки в пределах базы данных.

Тип данных UNIQUEIDENTIFIER используется для хранения глобальных уникальных идентификационных номеров.

Тип данных SYSNAME предназначен для идентификаторов объектов.

Тип данных SQL_VARIANT позволяет хранить значения любого из поддерживаемых SQL Server типов данных за исключением TEXT, NTEXT, IMAGE и TIMESTAMP.

Тип данных TABLE, подобно временным таблицам, обеспечивает хранение набора строк, предназначенных для последующей обработки. Тип данных TABLE может применяться только для определения локальных переменных и возвращаемых пользовательскими функциями значений. Пример использования типа данных TABLE приведен в лекции, посвященной функциям пользователя.

Тип данных CURSOR нужен для работы с такими объектами, как курсоры, и может быть востребован только для переменных и параметров хранимых процедур. Курсоры SQL Server представляют собой механизм обмена данными между сервером и клиентом. Курсор позволяет клиентским приложениям работать не с полным набором данных, а лишь с одной или несколькими строками. Примеры использования данных типа CURSOR мы рассмотрим в лекциях, посвященных курсорам и хранимым процедурам.

Создание пользовательского типа данных

В системе SQL-сервера имеется поддержка пользовательских типов данных. Они могут использоваться при определении какого-либо специфического или часто употребляемого формата.

Создание пользовательского типа данных осуществляется выполнением системной процедуры:

sp_addtype [@typename=]type,[@phystype=] 
   system_data_type
      [,[@nulltype=]’null_type’]

Тип данных system_data_type выбирается из следующей таблицы.

Таблица 2.3.
image smalldatetime decimal bit
text real ‘decimal[(p[,s])]’ ‘binary(n)’
uniqueidentifier datetime numeric ‘char(n)’
smallint float ‘numeric[(p[,s])]’ ‘nvarchar(n)’
int ‘float(n)’ ‘varbinary(n)’
ntext ‘varchar(n)’ ‘nchar(n)’
EXEC sp_addtype bir, DATETIME, 'NULL' 
или 
EXEC sp_addtype bir, DATETIME, ‘NOT NULL’
Пример 2. 1. Создание пользовательского типа данных bir.
CREATE TABLE tab
(id_n	INT IDENTITY(1,1) PRIMARY KEY,
names	VARCHAR(40), 
birthday	BIR)
Пример 2.2. Использование пользовательского типа данных bir при создании таблицы.

Удаление пользовательского типа данных происходит в результате выполнения процедуры sp_droptype type: EXEC sp_droptype ‘bir’

Получение информации о типах данных

Получить список всех типов данных, включая пользовательские, можно из системной таблицы systypes:

Преобразование типов

Нередко требуется конвертировать значения одного типа в значения другого. Наиболее часто выполняется конвертирование чисел в символьные данные и наоборот, для этого используется специализированная функция STR. Для выполнения других преобразований SQL Server предлагает универсальные функции CONVERT и CAST, с помощью которых значения одного типа преобразовываются в значения другого типа, если такие изменения вообще возможны. CONVERT и CAST примерно одинаковы и могут быть взаимозаменяемыми.

CAST(выражение AS тип_данных)
CONVERT(тип_данных[(длина)],
   выражение [,стиль])

С помощью аргумента стиль можно управлять стилем представления значений следующих типов данных: дата/время, денежный или нецелочисленный.

DECLARE @d DATETIME
DECLARE  @s CHAR(8)
SET @s=’29.10.01’
SET @d=CAST(@s AS DATETIME)
Пример 2.3. Преобразование данных символьного типа к данным типа дата/время.

Наряду с типами данных основополагающими понятиями при работе с языком SQL в среде MS SQL Server являются выражения, операторы, переменные, управляющие конструкции.

Выражения

Выражения представляют собой комбинацию идентификаторов, функций, знаков логических и арифметических операций, констант и других объектов. Выражение может быть использовано в качестве аргумента в командах, хранимых процедурах или запросах.

Выражение состоит из операндов (собственно данных) и операторов (знаков операций, производимых над операндами). В качестве операндов могут выступать константы, переменные, имена столбцов, функции, подзапросы.

Операторы – это знаки операций над одним или несколькими выражениями для создания нового выражения. Среди операторов можно выделить унарные операторы, операторы присваивания, арифметические операторы, строковые операторы, операторы сравнения, логические операторы, битовые операторы.

Переменные

В среде SQL Server существует несколько способов передачи данных между командами. Один из них – передача данных через локальные переменные. Прежде чем использовать какую-либо переменную, ее следует объявить. Объявление переменной выполняется командой DECLARE, имеющей следующий формат:

DECLARE {@имя_переменной тип_данных }
   [,...n]

Значения переменной можно присвоить посредством команд SET и SELECT. С помощью команды SELECT переменной можно присвоить не только конкретное значение, но и результат вычисления выражения.

DECLARE @a INT
SET @a=10
Пример 2.4. Использование SET для присваивания значения локальной переменной.
DECLARE @k INT
SELECT @k=SUM(количество) FROM Товар
Пример 2. 5. Использование SELECT для присваивания локальной переменной результата вычислений.

Управляющие конструкции SQL

Язык SQL является непроцедурным, но тем не менее в среде SQL Server предусмотрен ряд различных управляющих конструкций, без которых невозможно написание эффективных алгоритмов.

Группировка двух и более команд в единый блок осуществляется с использованием ключевых слов BEGIN и END:

<блок_операторов>::=
BEGIN
{ sql_оператор | блок_операторов }
END

Сгруппированные команды воспринимаются интерпретатором SQL как одна команда. Подобная группировка требуется для конструкций поливариантных ветвлений, условных и циклических конструкций. Блоки BEGIN…END могут быть вложенными.

Некоторые команды SQL не должны выполняться вместе с другими командами (речь идет о командах резервного копирования, изменения структуры таблиц, хранимых процедур и им подобных), поэтому их совместное включение в конструкцию BEGIN. ..END не допускается.

Нередко определенная часть программы должна выполняться только при реализации некоторого логического условия. Синтаксис условного оператора показан ниже:

<условный_оператор>::=
IF лог_выражение
  { sql_оператор | блок_операторов }
[ ELSE
  {sql_оператор | блок_операторов } ]

Циклы организуются с помощью следующей конструкции:

<оператор_цикла>::=
WHILE лог_выражение
   { sql_оператор | блок_операторов }
   [ BREAK ]
   { sql_оператор | блок_операторов }
   [ CONTINUE ]

Цикл можно принудительно остановить, если в его теле выполнить команду BREAK. Если же нужно начать цикл заново, не дожидаясь выполнения всех команд в теле, необходимо выполнить команду CONTINUE.

Для замены множества одиночных или вложенных условных операторов используется следующая конструкция:

<оператор_поливариантных_ветвлений>::=
CASE входное_значение
WHEN {значение_для_сравнения |
   лог_выражение } THEN
   вых_выражение [,. ..n]
[ ELSE иначе_вых_значение ]
END

Если входное значение и значение для сравнения совпадают, то конструкция возвращает выходное значение. Если же значение входного параметра не найдено ни в одной из строк WHEN…THEN, то тогда будет возвращено значение, указанное после ключевого слова ELSE.

Основные объекты структуры базы данных SQL-сервера

Рассмотрим логическую структуру базы данных.

Логическая структура определяет структуру таблиц, взаимоотношения между ними, список пользователей, хранимые процедуры, правила, умолчания и другие объекты базы данных.

Логически данные в SQL Server организованы в виде объектов. К основным объектам базы данных SQL Server относятся объекты, представленные в таблице 2. 4.

Таблица 2.4.
Tables Таблицы базы данных, в которых хранятся собственно данные
Views Просмотры (виртуальные таблицы) для отображения данных из таблиц
Stored Procedures Хранимые процедуры
Triggers Триггеры – специальные хранимые процедуры, вызываемые при изменении данных в таблице
User Defined function Создаваемые пользователем функции
Indexes Индексы – дополнительные структуры, призванные повысить производительность работы с данными
User Defined Data Types Определяемые пользователем типы данных
Keys Ключи – один из видов ограничений целостности данных
Constraints Ограничение целостности – объекты для обеспечения логической целостности данных
Users Пользователи, обладающие доступом к базе данных
Roles Роли, позволяющие объединять пользователей в группы
Rules Правила базы данных, позволяющие контролировать логическую целостность данных
Defaults Умолчания или стандартные установки базы данных

Приведем краткий обзор основных объектов баз данных.

Таблицы

Все данные в SQL содержатся в объектах, называемых таблицами. Таблицы представляют собой совокупность каких-либо сведений об объектах, явлениях, процессах реального мира. Никакие другие объекты не хранят данные, но они могут обращаться к данным в таблице. Таблицы в SQL имеют такую же структуру, что и таблицы всех других СУБД и содержат:

  • cтроки; каждая строка (или запись) представляет собой совокупность атрибутов (свойств) конкретного экземпляра объекта;
  • cтолбцы; каждый столбец (поле) представляет собой атрибут или совокупность атрибутов. Поле строки является минимальным элементом таблицы. Каждый столбец в таблице имеет определенное имя, тип данных и размер.
Представления

Представлениями (просмотрами) называют виртуальные таблицы, содержимое которых определяется запросом. Подобно реальным таблицам, представления содержат именованные столбцы и строки с данными. Для конечных пользователей представление выглядит как таблица, но в действительности оно не содержит данных, а лишь представляет данные, расположенные в одной или нескольких таблицах. Информация, которую видит пользователь через представление, не сохраняется в базе данных как самостоятельный объект.

Хранимые процедуры

Хранимые процедуры представляют собой группу команд SQL, объединенных в один модуль. Такая группа команд компилируется и выполняется как единое целое.

Триггеры

Триггерами называется специальный класс хранимых процедур, автоматически запускаемых при добавлении, изменении или удалении данных из таблицы.

Функции

Функции в языках программирования – это конструкции, содержащие часто исполняемый код. Функция выполняет какие-либо действия над данными и возвращает некоторое значение.

Индексы

Индекс – структура, связанная с таблицей или представлением и предназначенная для ускорения поиска информации в них. Индекс определяется для одного или нескольких столбцов, называемых индексированными столбцами. Он содержит отсортированные значения индексированного столбца или столбцов со ссылками на соответствующую строку исходной таблицы или представления. Повышение производительности достигается за счет сортировки данных. Использование индексов может существенно повысить производительность поиска, однако для хранения индексов необходимо дополнительное пространство в базе данных.

Пользовательские типы данных

Пользовательские типы данных – это типы данных, которые создает пользователь на основе системных типов данных, когда в нескольких таблицах необходимо хранить однотипные значения; причем нужно гарантировать, что столбцы в таблице будут иметь одинаковый размер, тип данных и чувствительность к значениям NULL.

Ограничения целостности

Ограничения целостности – механизм, обеспечивающий автоматический контроль соответствия данных установленным условиям (или ограничениям). Ограничения целостности имеют приоритет над триггерами, правилами и значениями по умолчанию. К ограничениям целостности относятся: ограничение на значение NULL, проверочные ограничения, ограничение уникальности (уникальный ключ), ограничение первичного ключа и ограничение внешнего ключа. Последние три ограничения тесно связаны с понятием ключей.

Правила

Правила используются для ограничения значений, хранимых в столбце таблицы или в пользовательском типе данных. Они существуют как самостоятельные объекты базы данных, которые связываются со столбцами таблиц и пользовательскими типами данных. Контроль значений данных может быть реализован и с помощью ограничений целостности.

Умолчания

Умолчания – самостоятельный объект базы данных, представляющий значение, которое будет присвоено элементу таблицы при вставке строки, если в команде вставки явно не указано значение для этого столбца.

Различные типы данных в SQL

Не все типы значений, содержащиеся в полях таблицы, логически одинаковы. Наиболее очевидны различия между числами и текстом. Невозможно расположить числа в алфавитном порядке или извлечь одно имя из другого. Поскольку системы реляционных баз данных основаны на связях между частями информации, различные типы данных должны явно отличаться друг от друга, чтобы можно было применить подходящие способы их обработки и сравнения.

В SQL каждому полю приписывается «тип данных» (data type), который определяет, какого рода значения могут содержаться в поле. Все значения для данного поля должны быть одного типа.

Не все типы значений, содержащиеся в полях таблицы, логически одинаковы. Наиболее очевидны различия между числами и текстом. Невозможно расположить числа в алфавитном порядке или извлечь одно имя из другого. Поскольку системы реляционных баз данных основаны на связях между частями информации, различные типы данных должны явно отличаться друг от друга, чтобы можно было применить подходящие способы их обработки и сравнения.

В SQL каждому полю приписывается «тип данных» (data type), который определяет, какого рода значения могут содержаться в поле. Все значения для данного поля должны быть одного типа.

В таблице Customers, например, поля cname и city являются строками текста, тогда как поля rating, snum, cnum — числовые. Именно по этой причине невозможно занести значения «Highest» или «None» в поле rating, имеющее числовой тип. Это удачное ограничение, поскольку оно накладывает некоторую структуру на конкретные данные. Операцию сравнения, которая выполняется для одних строк и не выполняется для других, невозможно произвести, если значения поля имеют смешанный тип данных.

Определение этих типов данных является той областью, в которой многие коммерческие СУБД и официальный стандарт SQL имеют существенные различия. Стандарт ANSI SQL распознает только текстовый и числовой типы, тогда как многие коммерческие СУБД используют и другие специальные типы данных. Заметим, что типы DATE (дата) и TIME (время) почти de-facto являются стандартными (хотя конкретные их форматы отличаются). Некоторые СУБД поддерживают такие типы данных как MONEY (деньги) и BINARY (двоичный). (BINARY — это специальное числовое представление, используемое компьютером. Вся информация в компьютере представлена двоичными числами, затем она преобразуется в другие системы — так ее легче использовать и понимать.)

ANSI определяет несколько различных типов числовых значений. Сложность числовых типов ANSI объясняется, по крайне мере частично, попыткой поддержать совместимость вложенного SQL с множеством других языков.

Два типа данных ANSI, INTEGER и DECIMAL (для которых можно использовать аббревиатуру INT и DEC соответственно}, адекватны и теоретическим целям, и множеству практических приложений в деловой жизни. INTEGER отличается от DECIMAL тем, что запрещает использовать цифры справа от десятичной точки, а также саму десятичную точку.

Типом данных для текста является CHAR (CHARACTER), который относится к строке текста. Поле типа CHAR имеет фиксированную длину, равную максимальному числу букв, которые можно ввести в это поле. Большинство реализаций SQL имеет нестандартный тип, названный VARCHAR, — это текстовая строка любой длины вплоть до максимума, определяемого конкретной реализацией SQL. Значения CHAR и VARCHAR заключаются в одиночные кавычки, как, например, ‘текст’. Различие между ними состоит в том, что для типа CHAR отводится участок памяти, достаточный для хранения строки максимальной длины, а для VARCHAR память выделяется по мере необходимости.

Символьные типы состоят из всех символов, которые можно ввести с клавиатуры, в том числе и цифр. Однако, число 1 не есть то же самое, что символ ‘1 ‘. Символ ‘1’ это совсем другая часть печатного текста, которая не распознается компьютером как числовое значение 1. 1+1=2, но ‘1’ + ‘1’ не равно ‘2’. Значения типа CHARACTER хранятся в компьютере как двоичные значения, но для пользователя представляются в виде печатного текста. Преобразование выполняется в соответствии с форматом, определяемым той системой, которой вы пользуетесь. Это может быть формат одного из двух стандартных типов (возможно, с расширениями), которые применяются в компьютерных системах : ASCII (используется во всех персональных и большинстве малых компьютеров) и EBCDIC (используется для больших компьютеров). Определенные операции, такие как упорядочение значений поля по алфавиту, зависят от формата.

Тип DATE будет применяться в соответствии с требованиями рынка, а не ANSI. В реализациях SQL, не распознающих тип DATE, можно объявить дату символьным или числовым полем, но это затруднит выполнение множества операций. Следует ознакомиться с документацией по программному обеспечению SQL-системы, чтобы точно определить, какие типы данных она поддерживает.

Источник: SQL для простых смертных / Мартинн Грабер

С уважением, Артём Санников

Сайт: ArtemSannikov.ru

Теги: MySQL, База данных.

Числовые типы данных

Рассмотрим числовые типы данных, которые используются в SQL.

TINYINT (N)

Тип данных хранит целое число, которое можно объявить положительным, используя ключевое слово UNSIGNED. В таком случае элементам столбца недоступно будет присвоение отрицательного значения.

Параметр N является необязательным и указывает на количество символов, которые отводятся под число.

Атрибут ZEROFILL является необязательным, заполняет по умолчанию свободные позиции нулями.

Занимаемый объем памяти – $1$ байт, диапазон значений – от $0$ до $255$ или от $-128$ до $127$.

Пример 1

TINYINT UNSIGNED – любое число из диапазона от $0$ до $255$.

TINYINT – любое число из диапазона от -$128$ до $127$.

TINYINT ($2$) – указывает на хранение двузначных значений, но хранит и трехзначные значения.

TINYINT ($4$) ZEROFILL заполняет свободные позиции слева нулями. К примеру, значение $5$ будет отображено как $0005$.

SMALLINT (M)

Тип данных, аналогичный предыдущему, но с занимаемым объемом памяти – $2$ байта и диапазоном значений – от $0$ до $65 \ 535$ или от $-32 \ 768$ до $32 \ 767$.

Пример 2

SMALLINT – любое число из диапазона от $-32 \ 768$ до $32 \ 767$.

SMALLINT UNSIGNED – любое число из диапазона от $0$ до $65 \ 535$.

SMALLINT ($3$) – указывает на хранение трехзначных значений, но хранит и четырехзначные значения.

SMALLINT ($3$) ZEROFILL – заполняет свободные позиции слева нулями. К примеру, значение $7$ будет отображено как $007$.

MEDIUMINT (M)

Тип данных, аналогичный предыдущему, но с занимаемым объемом памяти – $3$ байта и диапазоном значений – от $0$ до $16 \ 777 \ 215$ или от $-8 \ 388 \ 608$ до $8 \ 388 \ 608$.

Пример 3

MEDIUMINT – любое число из диапазона от $-8 \ 388 \ 608$ до $8 \ 388 \ 608$.

MEDIUMINT UNSIGNED – любое число из диапазона от $0$ до $16 \ 777 \ 215$.

MEDIUMINT ($4$) – указывает на хранение четырехзначных значений, но хранит и семизначные.

MEDIUMINT ($4$) ZEROFILL – заполняет свободные позиции слева нулями. К примеру, значение $8$ будет отображено как $0008$.

INT (N) или INTEGER (N)

Тип данных, аналогичный предыдущему, но с занимаемым объемом памяти – $4$ байта и диапазоном значений – от $0$ до $4 \ 294 \ 967 \ 295$ или от $-2 \ 147 \ 683 \ 648$ до $2 \ 147 \ 683 \ 648$.

Пример 4

INT – любое число из диапазона от $-2 \ 147 \ 683 \ 648$ до $2 \ 147 \ 683 \ 648$.

INT UNSIGNED – любое число из диапазона от $0$ до $4 \ 294 \ 967 \ 295$.

INT ($5$) – указывает на хранение пятизначных значений, но хранит максимально возможные.

INT ($3$) ZEROFILL – заполняет свободные позиции слева нулями.

BIGINT (N)

Тип данных, аналогичный предыдущему, но с занимаемым объемом памяти – $8$ байт и диапазоном значений – от $0$ до $264$ или от $-263$ до $263-1$.

Пример 5

BIGINT – любое число из диапазона от $-263$ до $263-1$.

BIGINT UNSIGNED – любое число из диапазона от $0$ до $264$.

BIGINT ($5$) – указывает на хранение пятизначных значений, но хранит максимально возможные.

BIGINT ($3$) ZEROFILL – заполняет свободные позиции слева нулями.

BOOL или BOOLEAN

Хранит одно из булевых значений: 0ложь (false) или 1истина (true).

Занимаемый объем памяти – $1$ байт, диапазон значений – $0$ или $1$.

DECIMAL (N,S), DEC (N,S) или NUMERIC (N,S)

Хранит величины повышенной точности, например, значения денежных данных.

$N$ – количество символов, которые отводятся под число. Максимальным значением для $N$ является $64$.

$S$ – количество знаков после запятой. {308}$.

Замечание 1

Обратим внимание, что чем большим является диапазон значений типа данных, тем больше памяти будет он занимать. Правильный выбор типа данных позволит сэкономить место для их хранения.

Типы данных — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Ниже приведен список типов данных, доступных в Oracle/PLSQL, который включает в себя символьные, числовые, дата/время, булевы LOB, RowId типы данных.

Символьные типы данных

Ниже перечислены символьные типы данных в Oracle/PLSQL:

Типы данныхРазмерОписание
char(размер)Максимальный размер 2000 байт.Где размер — количество символов фиксированной длины. Если сохраняемое значение короче, то дополняется пробелами; если длиннее, то выдается ошибка.
nchar(размер)Максимальный размер 2000 байт.Где размер — количество символов фиксированной длины в кодировке Unicode. Если сохраняемое значение короче, то дополняется пробелами; если длиннее, то выдается ошибка.
nvarchar2(размер)Максимальный размер 4000 байт.Где размер – количество сохраняемых символов в кодировке Unicode переменной длины.
varchar2(размер)Максимальный размер 4000 байт. Максимальный размер в PLSQL 32KB.Где размер – количество сохраняемых символов переменной длины.
longМаксимальный размер 2GB.Символьные данные переменной длины.
rawМаксимальный размер 2000 байт.Содержит двоичные данные переменной длины
long rawМаксимальный размер 2GB.Содержит двоичные данные переменной длины

Применение: Oracle 9i, Oracle 10g, Oracle 11g, Oracle 12c

Числовые типы данных

Ниже приведены числовые типы данных в Oracle/PLSQL:

Типы данныхРазмерОписание
number(точность,масштаб)Точность может быть в диапазоне от 1 до 38.
Масштаб может быть в диапазоне от -84 до 127.
Например,number (14,5) представляет собой число, которое имеет 9 знаков до запятой и 5 знаков после запятой.
numeric(точность,масштаб)Точность может быть в диапазоне от 1 до 38. Например, numeric(14,5) представляет собой число, которое имеет 9 знаков до запятой и 5 знаков после запятой.
dec(точность,масштаб)Точность может быть в диапазоне от 1 до 38.Например, dec (5,2) — это число, которое имеет 3 знака перед запятой и 2 знака после .
decimal(точность,масштаб)Точность может быть в диапазоне от 1 до 38.Например, decimal (5,2) — это число, которое имеет 3 знака перед запятой и 2 знака после .
PLS_INTEGERЦелые числа в диапазоне от -2,147,483,648 до
2,147,483,647
Значение PLS_INTEGER требуют меньше памяти и быстрее значений NUMBER

Применение: Oracle 9i, Oracle 10g, Oracle 11g, Oracle 12c

Дата/время типы данных

Ниже приведены типы данных дата/время в Oracle/PLSQL:

Типы данныхРазмерОписание
datedate может принимать значения от 1 января 4712 года до н. э. до 31 декабря 9999 года нашей эры.

Применение: Oracle 9i, Oracle 10g, Oracle 11g, Oracle 12c

Большие объекты (LOB) типы данных

Ниже перечислены типы данных LOB в Oracle/PLSQL:

Типы данныхРазмерОписание
bfileМаксимальный размер файла 4 ГБ.Файл locators, указывает на двоичный файл в файловой системе сервера (вне базы данных).
blobХранит до 4 ГБ двоичных данных.Хранит неструктурированные двоичные большие объекты.
clobХранит до 4 ГБ символьных данных.Хранит однобайтовые и многобайтовые символьные данные.
nclobХранит до 4 ГБ символьных текстовых данных.Сохраняет данные в кодировке unicode.

Применение: Oracle 9i, Oracle 10g, Oracle 11g, Oracle 12c

Rowid тип данных

Ниже перечислены типы данных Rowid в Oracle/PLSQL:

Типы данныхФорматОписание
rowidФормат строки: BBBBBBB. RRRR.FFFFF,Где BBBBBBB — это блок в файле базы данных; RRRR — строка в блоке; FFFFF — это файл базы данных.Двоичные данные фиксированной длины. Каждая запись в базе данных имеет физический адрес или идентификатор строки (rowid).

Булевы (BOOLEAN) типы данных

Типы данныхФорматОписание
BOOLEAN TRUE или FALSE. Может принимать значение NULLХранит логические значения, которые вы можете использовать в логических операциях.

Применение: Oracle 9i, Oracle 10g, Oracle 11g, Oracle 12c

Общие сведения о типе данных SQL Decimal

Цель этой статьи — познакомить вас с типом данных SQL Decimal и его использованием на различных примерах. Мы также увидим, как использовать этот тип данных в SQL Server, чтобы облегчить работу разработчика SQL.

Введение

Организации ежедневно имеют дело с десятичными числами, и эти десятичные значения можно увидеть повсюду в различных секторах, будь то банки, медицинская промышленность, биометрия, заправочные станции, финансовые отчеты, спорт и многое другое. Использование целых чисел (округлением десятичных чисел) определенно упрощает работу, но часто приводит к неточным выводам, особенно когда мы имеем дело с большим количеством значений и важных данных. В таких сценариях идеально использовать тип данных Sql Decimal в SQL Server для получения правильных результатов с идеальной точностью.

Для разработчиков SQL становится очень важным выбрать правильные типы данных в структуре таблицы при проектировании и моделировании баз данных SQL.Давайте продвинемся вперед и исследуем тип данных Decimal в SQL Server.

Обязательное условие

Тип данных SQL Decimal используется в SQL Server с незапамятных времен. Вы можете использовать любую установленную версию SQL Server (начиная с 2000 года или выше), чтобы понять этот тип данных. В этой статье мы будем использовать SQL Server 2017 в демонстрационных целях. Если в вашей системе не установлена ​​какая-либо версия и вы хотите попрактиковаться в версии 2017 года, загрузите ее отсюда.

Базовый синтаксис типа данных Decimal в SQL Server

Давайте сначала рассмотрим базовый синтаксис типа данных SQL Decimal.Обозначается это ниже:

Где,

  • p означает точность, общее количество цифр в значении, то есть по обе стороны от десятичной точки.
  • s означает масштаб, количество цифр после десятичной точки.

Значение по умолчанию для p равно 18, а s равно 0, и для обоих этих значений минимальное значение равно 1, а максимальное — 38.

Короче говоря, определяя параметры в типе данных SQL Decimal, мы оцениваем, сколько цифр будет иметь столбец или переменная, а также количество цифр справа от десятичной точки.

Например, decimal (4,2) указывает, что число будет иметь 2 цифры перед десятичной точкой и 2 цифры после десятичной точки, что-то вроде этого должно быть числовым значением — ##. ##.

Здесь следует отметить одну важную вещь: параметр s (Масштаб) может быть указан, только если указан p (Точность). Масштаб всегда должен быть меньше или равен точности.

Определение типа данных SQL Decimal

Давайте поработаем с очень популярной математической константой — π, иначе Пи, которая имеет значение, равное 3.14159 (22/7 в дроби). Скопируйте и вставьте приведенный ниже запрос в новое окно запроса и выполните его.

DECLARE @PiWithNoDecimal DECIMAL (6,0) = 3,14159

DECLARE @ Piupto5Decimal DECIMAL (6,5) = 3,14159

DECLARE @ Piupto1Decimal ASithNoDECIMAL

,

DECLARE @ Piupto1Decimal ASIithDECIMAL (3,19) Piupto5Decimal, @ Piupto1Decimal AS Piupto1Decimal

Приведенный выше набор результатов показывает, как SQL Server обрабатывает каждую комбинацию точности и масштаба как отдельный тип данных.Как и здесь, decimal (6, 0) ведет себя иначе, чем типы данных decimal (6,5) и decimal (3,1), и рассматриваются как три разных типа. Таким образом, мы можем настроить параметры в типе SQL Decimal для достижения желаемых результатов.

Теперь, когда мы знаем, как создать этот тип данных Decimal в SQL Server, давайте рассмотрим его на многочисленных примерах.

Использование десятичных чисел SQL в таблицах

Давайте быстро создадим новую таблицу с именем «Пациенты», в которой используется десятичный тип данных для высоты и веса столбцов.Мы вставим несколько строк, используя предложение INSERT, как показано ниже, для демонстрационных целей.

СОЗДАТЬ ТАБЛИЦУ dbo.Patients

(Имя varchar (10),

Пол varchar (2),

Десятичное число высоты (3,2),

Десятичное число веса (5,2)

)

INSERT INTO ЗНАЧЕНИЯ ПАЦИЕНТА (‘John’, ‘M’, 6.1,80.4)

ВСТАВИТЬ ЗНАЧЕНИЯ ПАЦИЕНТОВ (‘Bred’, ‘M’, 5.8,73.7)

ВСТАВИТЬ ЗНАЧЕНИЯ ПАЦИЕНТОВ (‘Leslie’, ‘F’, 5 .3,66.9)

ВСТАВИТЬ ЗНАЧЕНИЯ ПАЦИЕНТОВ (‘Rebecca’, ‘F’, 5.7,50.2)

ВСТАВИТЬ ЗНАЧЕНИЯ ПАЦИЕНТОВ (‘Shermas’, ‘M’, 6.5,190. 6)

После того, как данные будут заполнены в таблице, мы можем запросить эти данные с помощью оператора SELECT, как показано ниже. Десятичные значения можно увидеть в атрибутах роста и веса.

ВЫБРАТЬ * ИЗ dbo.PATIENTS

Давайте разберемся, что произойдет, если мы попытаемся вставить значения, превышающие указанную точность или значения шкалы при определении столбцов Высота и Вес.Для этой демонстрации мы вставим еще 2 строки в эту таблицу (показано ниже).

  1. ВСТАВИТЬ ЗНАЧЕНИЯ ПАЦИЕНТОВ («Наибольшие», «M», «10,9», 88,5)

  2. ВСТАВИТЬ ЗНАЧЕНИЯ ПАЦИЕНТОВ («Халк», «M», «9,9», 1000,45)

Он обнаруживает ошибку ниже, сообщающую об ошибке арифметического переполнения, и SQL Server завершил выполнение операторов.

Давайте рассмотрим корень проблемы:

  • Высота в десятичной системе счисления (3, 2) означает, что значение может состоять из 3 цифр в целом и 2 цифр справа от десятичной точки. В первой строке кода выше значение 10.9 (рассматриваемое как 10.90 = 4 цифры в целом) превышает указанный диапазон (3, 2) и вызывает переполнение
  • Вес Десятичное число (5,2) означает, что общее количество цифр не может превышать 5, и 2 цифры могут быть помещены справа от десятичной дроби.Однако значение 1000,45 во второй строке кода выше превышает указанный диапазон (5, 2), поскольку оно означает всего 6 цифр и вызывает ошибку переполнения.
  • Краткое примечание — Если вы заметили, что в приведенном выше сообщении об ошибке вместо десятичного типа данных указывается «числовой тип данных», причина в том, что десятичный и числовой типы данных одинаковы, оба являются типы данных с фиксированной точностью и могут использоваться взаимозаменяемо

Устранение ошибки

Один из самых простых способов решения этой проблемы — повысить уровень точности столбцов для хранения больших чисел. Мы можем изменить тип данных столбцов, не удаляя таблицу или столбец с помощью приведенного ниже кода.

ALTER TABLE dbo.Patients ALTER COLUMN Высота десятичной дроби (4,2)

ALTER TABLE dbo.Patients ALTER COLUMN Вес десятичной дроби (6,2)

После изменения выполните запросы Insert, чтобы вставить эти строки в таблицу.

Мы видим, что строки добавляются в таблицу.

Рекомендации по хранению с типом данных Decimal в SQL Server

Тип данных SQL Decimal требует следующих байтов хранения для указанной точности, как указано ниже Microsoft:

Прецизионный

Память (байты)

1–9

5

10–19

9

20–28

13

29 — 38

17

Использование пространства для типа данных SQL Decimal основано на определении столбца, а не на размере присвоенного ему значения. Например, Десятичное (12, 4) со значением 888.888 занимает 9 байтов на диске, а десятичное (22, 2) значение 9999,99 занимает 13 байтов на диске. Вот почему этот тип данных относится к столбцам фиксированной длины.

Как разработчик SQL, я всегда стараюсь использовать тип данных SQL Decimal как десятичный (9, 2), который потребляет меньше всего памяти, 5 байт на диске и обеспечивает лучшую производительность.

Заключение

Я надеюсь, что эта статья предлагает понятный подход к использованию типа данных SQL Decimal.Всегда проверяйте, чтобы точность указанной десятичной или числовой переменной была достаточной для соответствия присвоенным ей значениям. Кроме того, мы наблюдали, как выбор правильного типа данных помогает разработчикам SQL экономить дисковое пространство.

В случае каких-либо вопросов, пожалуйста, задавайте их в разделе комментариев ниже.

Чтобы продолжить знакомство с SQL Server и используемыми в нем типами данных, я бы рекомендовал перейти по ссылкам ниже.

Гаури является специалистом по SQL Server и имеет более 6 лет опыта работы с международными международными консалтинговыми и технологическими организациями.Она очень увлечена работой над темами SQL Server, такими как База данных SQL Azure, Службы отчетов SQL Server, R, Python, Power BI, ядро ​​базы данных и т. Д. Она имеет многолетний опыт работы с технической документацией и увлекается разработкой технологий.

Она имеет большой опыт в разработке решений для данных и аналитики, а также в обеспечении их стабильности, надежности и производительности. Она также сертифицирована по SQL Server и прошла такие сертификаты, как 70-463: Внедрение хранилищ данных с Microsoft SQL Server.

Посмотреть все сообщения от Gauri Mahajan

Последние сообщения от Gauri Mahajan (посмотреть все)

Общие сведения о типах данных SQL Server

В следующих разделах описаны типы данных, поддерживаемые SQL Server.

Типы данных SQL Server

Типы данных, поддерживаемые Microsoft SQL Server, можно разделить на три основные категории: строковые, числовые и типы данных даты / времени.

Строковые типы данных

Строковые типы данных обычно используются для хранения имен, адресов, описаний или любых значений, содержащих буквы и цифры, включая двоичные данные, например изображения или аудиофайлы.

Тип данных Описание
симв. ( n ) Хранит символьную строку фиксированной длины.Максимальная длина 8000 символов.
varchar ( n ) Хранит символьную строку переменной длины. Максимальная длина 8000 символов.
varchar (макс.) Хранит символьную строку переменной длины. Здесь max указывает, что максимальный размер хранилища составляет 2 ГБ.
текст Хранит символьную строку переменной длины.Максимальный размер хранилища — 2 ГБ.
nchar Хранит строку Unicode фиксированной длины. Максимальная длина 4000 символов.
nvarchar Хранит строку Unicode переменной длины. Максимальная длина 4000 символов.
nvarchar (макс.) Хранит строку Unicode переменной длины. Здесь max указывает, что максимальный размер хранилища составляет 2 ГБ.
ntext Хранит строку Unicode переменной длины. Максимальный размер хранилища — 2 ГБ.
двоичный ( n ) Хранит двоичные данные фиксированной длины. Максимальный размер хранилища — 8000 байт.
varbinary ( n ) Хранит двоичные данные переменной длины. Максимальный размер хранилища — 8000 байт.
varbinary (макс.) Хранит двоичные данные переменной длины. Здесь max указывает, что максимальный размер хранилища составляет 2 ГБ.
изображение Хранит двоичные данные переменной длины. Максимальный размер хранилища — 8000 байт.

Числовые типы данных

Числовые типы данных обычно используются для хранения таких данных, как цена, зарплата и т. Д.

Тип данных Описание
бит Позволяет сохранить значение 1, 0 или NULL .
tinyint Хранит целочисленные значения в диапазоне от 0 до 255.
smallint Хранит целочисленные значения в диапазоне от -32 768 до 32 767.
внутренний Хранит целочисленные значения в диапазоне от -2 147 483 648 до 2 147 483 647.
bigint Хранит целочисленные значения в диапазоне от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807.
десятичный ( p , s ) Хранит фиксированные числа точности и шкалы. 38 — 1. Подробнее см. Ниже.
числовой ( p , s ) Числовой тип данных функционально эквивалентен десятичному типу .
smallmoney Позволяет точно хранить денежные или валютные значения в диапазоне от -214 748,3648 до 214 748,3647.
деньги Позволяет точно хранить денежные или валютные значения в диапазоне от -922,337,203,685,477.5808 на 922 337 203 685 477 5807.
поплавок (n) Хранит числовые значения с плавающей запятой. Допустимые значения: от -1,79E + 308 до -2,23E-308, 0 и от 2,23E-308 до 1,79E + 308.
реальный Хранит числовые значения с плавающей запятой. Допустимые значения: от -3,40E + 38 до -1,18E — 38, 0 и 1,18E — 38 до 3,40E + 38.

При объявлении десятичного или столбца или numeric можно указать точность и масштаб, например десятичный ( p , s ) или numeric ( p , s ) , где p или точность указывает максимальное общее количество цифр, которое может быть сохранено как слева, так и справа от десятичной точки.Точность должна быть от 1 до 38. Точность по умолчанию — 18.

Принимая во внимание, что s или шкала указывает максимальное количество цифр, которое может быть сохранено справа от десятичной точки. Это число вычитается из p , чтобы определить максимальное количество цифр слева от десятичной точки. Масштаб должен иметь значение от 0 до p. Масштаб по умолчанию — 0.

Например, в столбце десятичная цена (6,2) может храниться любое значение с шестью цифрами и двумя десятичными знаками i.е. в диапазоне от -9999,99 до 9999,99.


Типы данных даты и времени

Типы данных Date и Time обычно используются для хранения таких данных, как дата рождения, дата приема на работу, дата и время, когда запись создается или обновляется внутри таблицы и т. Д.

Тип данных Описание
дата Хранит значение даты в диапазоне от 0001-01-01 (1 января) до
9999-12-31 (31 декабря 9999).
время Сохраняет время суток с точностью до 100 наносекунд. Допустимые значения: от 00: 00: 00.0000000 до 23: 59: 59.9999999.
дата и время Сохраняет комбинированное значение даты и времени с точностью до 3,33 миллисекунды. Допустимый диапазон дат для datetime : от 1753-01-01 (1 января 1753 г.) до 9999-12-31 (31 декабря 9999 г.).
datetime2 datetime2 является расширением типа данных datetime , который имеет больший диапазон дат.Допустимый диапазон дат для datetime2 : от 0001-01-01 (1 января) до 9999-12-31 (31 декабря 9999).
smalldatetime Сохраняет комбинированное значение даты и времени с точностью до 1 минуты. Допустимый диапазон дат для smalldatetime : от 1900-01-01 (1 января 1900) до
2079-06-06 (6 июня 2079).
datetimeoffset То же, что и datetime2 с добавлением смещения часового пояса.Формат по умолчанию: ГГГГ-ММ-ДД чч: мм: сс [.nnnnnnn] [{+ | -} чч: мм] . Допустимый диапазон для смещения часового пояса от -14: 00 до +14: 00.
отметка времени В SQL Server метка времени является синонимом типа данных rowversion , который автоматически генерирует уникальные двоичные числа в базе данных. Версия строки обычно используется для строк таблицы штампа версий.

Примечание: Каждый раз, когда строка со столбцом rowversion вставляется или изменяется внутри таблицы, увеличенное значение rowversion базы данных вставляется в столбец rowversion .Таблица может иметь только один столбец rowversion .

SQL Server: типы данных


Ниже приведен список типов данных, доступных в SQL Server (Transact-SQL), который включает строковые, числовые типы данных и типы данных даты / времени.

Строковые типы данных

Ниже приведены строковые типы данных в SQL Server (Transact-SQL):

Синтаксис типа данных Максимальный размер Пояснение
СИМВОЛ ( размер ) Максимальный размер 8000 символов. Где размер — количество символов для хранения. Фиксированная длина. Пробел заполнен справа до размера , символов. Данные не в Юникоде.
VARCHAR ( размер ) или VARCHAR (макс.) Максимальный размер 8000 или не более символов. Где размер — количество символов для хранения. Переменной длины. Если указано max , максимальное количество символов составляет 2 ГБ.Данные не в Юникоде.
ТЕКСТ Максимальный размер 2 ГБ. переменной длины. Данные не в Юникоде.
NCHAR ( размер ) Максимальный размер 4000 символов. Фиксированная длина. Данные Unicode.
NVARCHAR ( размер ) или NVARCHAR (макс.) Максимальный размер 4000 или не более символов. Где размер — количество символов для хранения. Переменной длины. Если указано max , максимальное количество символов составляет 2 ГБ. Данные Unicode.
NTEXT Максимальный размер 1 073 741 823 байта. Переменная длина. Данные Unicode.
ДВОИЧНЫЙ ( размер ) Максимальный размер 8000 символов. Где размер — количество символов для хранения. Фиксированная длина. Пробел заполнен справа до размера , символов.Двоичные данные.
VARBINARY ( размер ) или VARBINARY (макс.) Максимальный размер 8000 или не более символов. Где размер — количество символов для хранения. Переменной длины. Если указано max , максимальное количество символов составляет 2 ГБ. Недвоичные данные.
ИЗОБРАЖЕНИЕ Максимальный размер 2 ГБ. Переменная длина. Двоичные данные.

Числовые типы данных

Ниже приведены числовые типы данных в SQL Server (Transact-SQL):

Синтаксис типа данных Максимальный размер Пояснение
БИТ Целое число, которое может быть 0, 1 или NULL.
TINYINT от 0 до 255
МАЛЕНЬКИЙ-32768 до 32767
ИНТ -2 147 483 648 до 2 147 483 647
BIGINT -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
ДЕСЯТИЧНЫЙ ( м , d ) м по умолчанию 18, если не указано иное.
d по умолчанию 0, если не указано.
Где m — общее количество цифр, а d — количество цифр после десятичной дроби.
DEC ( м , d ) м по умолчанию 18, если не указано иное.
d по умолчанию 0, если не указано.
Где m — общее количество цифр, а d — количество цифр после десятичной дроби.

Это синоним типа данных DECIMAL.

ЦИФРОВОЙ ( м , d ) м по умолчанию 18, если не указано иное.
d по умолчанию 0, если не указано.
Где m — общее количество цифр, а d — количество цифр после десятичной дроби.

Это синоним типа данных DECIMAL.

ПОПЛАВОК ( n ) Число с плавающей запятой.
n по умолчанию 53, если не указано иное.
Где n — количество битов для хранения в экспоненциальном представлении.
НАСТОЯЩИЙ Эквивалент FLOAT (24)
МАЛЕНЬКАЯ ДЕНЬ — 214 748,3648 до 214 748,3647
ДЕНЬГИ -922,337,203,685,477,5808 до 922,337,203,685,477,5807

Дата / время Типы данных

Ниже приведены типа данных даты / времени в SQL Server (Transact-SQL):

Синтаксис типа данных Максимальный размер Пояснение
(если применимо)
ДАТА Диапазон значений от 0001-01-01 до 9999-12-31. Отображается как «ГГГГ-ММ-ДД»
ВРЕМЯ Диапазон значений даты от «1753-01-01 00:00:00» до «9999-12-31 23:59:59».
Диапазон значений времени от ’00: 00: 00 ‘до ’23: 59: 59: 997’
Отображается как «ГГГГ-ММ-ДД чч: мм: сс [.ммм]»
DATETIME2 (точность долей секунды, ) Диапазон значений даты от 0001-01-01 до 9999-12-31.
Диапазон значений времени от «00: 00: 00» до «23: 59: 59: 9999999».
Отображается как «ГГГГ-ММ-ДД чч: мм: сс [. Доли секунды]»
МАЛЕНЬКАЯ ВРЕМЯ Диапазон значений даты от «1900-01-01» до «2079-06-06».
Диапазон значений времени от «00: 00: 00» до «23: 59: 59».
Отображается как «ГГГГ-ММ-ДД чч: мм: сс»
ВРЕМЯ Диапазон значений от ’00: 00: 00.0000000 ‘до ’23: 59: 59.9999999’ Отображается как «ГГГГ-ММ-ДД чч: мм: сс [.nnnnnnn]»
DATETIMEOFFSET ( дробные секунды, точность ) Диапазон значений даты от 0001-01-01 до 9999-12-31.
Диапазон значений времени от «00: 00: 00» до «23: 59: 59: 9999999».
Диапазон смещения часового пояса от -14: 00 до +14: 00.
Отображается как «ГГГГ-ММ-ДД чч: мм: сс [.nnnnnnn]» [{+ | -} чч: мм]

Радикально простое руководство по типам данных SQL Server

Сегодня мы собираемся обсудить типы данных в SQL Server и некоторые передовые практики. Но перед тем, как мы начнем, нужно кое-что сказать. Невозможно исчерпать тему репрезентации времени в одной статье, тем более в одном абзаце, поэтому я даже не буду пытаться.18).
INT
Основной числовой тип данных SQL Server. Он работает так же, как ваше обычное 32-битное целое число. Это идеальное сочетание размера и использования памяти.

Использование:
— В качестве ИДЕНТИФИКАЦИИ для разумного размера данных.
— для хранения чисел стандартного размера.
МАЛЕНЬКИЙ

Значительно меньше INT. Поскольку это 16-битное целое число, оно хранится в 2 байтах и ​​представляет значения от -32 768 до 32 767.

Использование:
— Для экономии памяти и дискового пространства.
— Стоит задуматься, когда диапазон данных используется в повседневной жизни.
TINYINT

Самый маленький тип данных. Он беззнаковый, хранится всего в одном байте и представляет значения от 0 до 255.

Использование:
— Когда диапазон данных небольшой.
— Для хранения двоичных флагов.

Числа с плавающей запятой

ПОПЛАВОК

Округление стандарта для чисел с плавающей запятой. По умолчанию в нем хранится 53 бита мантиссы, но с синтаксисом FLOAT (n) можно установить только два числа: 24 и 53. Любое значение меньше 24 преобразуется в 24, а значения больше 24 преобразуются в 53.
FLOAT почти соответствует стандарту IEEE-754. Чтобы он действительно соответствовал требованиям, он должен поддерживать три значения, которые могут отображаться в результате арифметических операций. Это значения NaN, положительная бесконечность и отрицательная бесконечность.

Использование:
— Почти исключительно в ситуации, которая удовлетворяет следующим двум условиям:
a) состояние приложения зависит от реализации чисел с плавающей запятой,
b) вы хотите сохранить это состояние как можно точнее.
— Крайне редко базы данных выполняют интенсивную обработку чисел. Эффективность реализации чисел произвольной точности не должна вызывать проблем.
НАСТОЯЩИЙ

Синоним FLOAT (24)

Числа произвольной точности

ДЕНЬГИ, МАЛЕНЬКИЕ ДЕНЬГИ

На самом деле это INT64 i INT.

Использование:
— Никогда не используйте!
— Типы ДЕНЬГИ имеют некоторые проблемы с точностью. Такие операции, как «вычисление стандартного отклонения цен на муку» или «сколько рулонов по 7 центов каждый я могу купить за доллар» , могут дать искаженные результаты.
ДЕСЯТИЧНЫЕ, ЧИСЛОВЫЕ

Типы DECIMAL и NUMERIC в SQL Server почти одинаковы. Их реализации в принципе идентичны друг другу. Они отличаются только спецификацией стандарта ANSI SQL.
Точность NUMERIC (p, s) равна p, а масштаб равен s. Точность DECIMAL (p, s) равна p, а масштаб не меньше s. Тип данных, указанный как DECIMAL, считается DECIMAL (18,0). Максимальная точность — 38 десятичных, что позволяет сохранять числа от -10 ^ 38 до 10 ^ 38-1, используя 17 байт. 38 (максимум).
— В большинстве случаев, когда вы хотите сохранить дроби.

Струны

СИМВОЛ, NCHAR

CHAR и NCHAR — это типы данных с фиксированной шириной. Они содержат определенное количество символов. Вопреки распространенному мнению в Интернете, этот тип не всегда использует один байт для одного символа, так как это зависит от используемой сортировки. Практическое правило — использовать CHAR для символов ASCII и NCHAR для других. Никогда не следует хранить UUID как тип CHAR.

Использование:
— с данными фиксированной длины (например,грамм. ИНН).
VARCHAR, NVARCHAR

VARCHAR и NVARCHAR, в отличие от CHAR и NCHAR, поддерживают переменную длину строки. Вот и все.

Использование:
— Тип данных по умолчанию для хранения данных.
УНИКАЛЬНЫЙ ИДЕНТИФИКАТОР

UNIQUEIDENTIFIER — это особый тип данных. Оно хранится внутри как 128-битное целое число (16 байт), но для конечного пользователя и драйвера подключения к базе данных оно выглядит как строка. Недостатками этого типа являются более крупное использование памяти и низкая производительность INSERT из-за разрывов страниц.Это особенно заметно при использовании функции NEWID () или при генерации криптографически безопасного UUID в приложении.

Использование:
— с репликацией мастер-мастер.
— Когда вы не хотите, чтобы пользователь угадывал следующие ключи.
— Когда приложению необходимо сгенерировать ключ независимо от соединения с базой данных.

Послесловие

Правильное использование типов, поддерживаемых SQL Server, означает, что вы можете:
1. Воспользуйтесь всеми преимуществами проверки согласованности данных, предлагаемой базой данных
2.Уменьшение объема памяти
3. Ускорение выполнения запросов

Как видите, улучшение производительности, полученное почти без затрат времени, делает этот метод оптимизации отличным. Используй это. Узнать его. Любить это.

Учебное пособие по типам данных SQL Server

В SQL столбцы таблицы определены для хранения значений определенного типа, например чисел, дат или текста; они называются типами данных. Имея на выбор более тридцати типов из SQL-сервера, типы данных могут показаться устрашающими, но на самом деле в базах данных обычно используются лишь некоторые из них.

Если вы разберетесь с типами данных в целом, это не составит труда. Вы также поймете, почему нужны типы данных и почему их так много.

В этой статье мы рассмотрим наиболее распространенные типы данных и лучшие практики их использования.

Все примеры для этого урока основаны на Microsoft SQL Server Management Studio и базе данных AdventureWorks2012. Начните использовать эти бесплатные инструменты с моим руководством « Начало работы с SQL Server ».

Что такое типы данных SQL Server?

Прежде чем мы перейдем к типам данных, используемым в SQL-сервере, я думаю, что для всех важно понять, что такое тип данных и почему они необходимы для использования в компьютерах.

В нашем примере мы поговорим о человеке. Если вы думали об информации, которую вы могли бы использовать для описания человека, вы можете подумать, чтобы собрать его имя, дату рождения, вес и количество детей. По каждому из этих атрибутов данные обычно делятся на несколько категорий.

Имена хранятся в виде текста, даты рождения — в виде календарных дат, а вес — в виде десятичных значений, а количество детей — в виде целых чисел. Каждая из этих категорий значений представляет собой тип данных.

Как типы SQL помогают

Типы данных определяют характеристики данных, которые могут храниться в таком месте, как столбец базы данных. Тип данных определяет возможный набор принимаемых значений. Например, тип INT, который в SQL-сервере означает целое число, может принимать только целые числа, десятичные значения не допускаются.

Вот список некоторых людей и их возраст

Возраст — просто текстовые значения

Вы видите проблему с этим возрастом? Все они имеют непоследовательный формат. Их трудно не только читать, но и отсортировать и вычислить данные. Используя типы данных SQL Server, которые обеспечивают сохранение ожидаемого типа данных, мы можем добиться гораздо лучшего результата. Вот та же таблица с возрастом в виде целых чисел

. Возраст, соответствующий типу данных INT

Когда возраст определяется как целое число, ожидается, что данные вводятся как целые числа.

Кроме того, не вдаваясь в технические подробности, вы можете увидеть, что сохранение возраста в виде целого числа занимает гораздо меньше места, чем возраст в первой таблице. Это может показаться не особо важным для небольших баз данных, но при работе с данными на смартфонах или в сценариях «больших данных» эти соображения складываются.

Как только система распознает тип данных, она может отсортировать данные в разумном порядке, а также выполнять вычисления.

Причины использования типов данных SQL Server

Вот несколько причин, по которым типы данных важны:

  1. Данные хранятся в согласованном и известном формате.
  2. Знание типа данных позволяет узнать, какие вычисления и формулы можно использовать для столбца.
  3. Типы данных влияют на хранилище. Некоторые значения занимают больше места при хранении в одном типе данных по сравнению с другим. Возьмем, к примеру, наши возрастные таблицы выше.
  4. Типы данных влияют на производительность. Чем меньше времени у базы данных для вывода значений или их преобразования, тем лучше. «32 декабря 2015 года — свидание?»

Обычно используемые типы данных SQL Server

В SQL вы определяете, какие данные хранить в столбцах.Некоторые примеры включают текстовые или числовые данные.

Это тип данных столбца и одно из его наиболее важных свойств, поскольку только он определяет, допустимо ли значение для хранения в столбце.

Существует более тридцати различных типов данных, из которых вы можете выбирать при определении столбцов, некоторые из них имеют особое применение, например, для хранения изображений.

В этой статье мы рассмотрим семь типов данных, с которыми вы чаще всего сталкиваетесь при повседневном использовании SQL. Это:

INT — Целочисленный тип данных

Целочисленный тип данных хранит целые числа. Примеры включают -23, 0, 5 и 10045. Целые числа не включают десятичные знаки. Поскольку сервер SQL использует несколько компьютерных слов для представления целого числа, существуют максимальные и минимальные значения, которые он может представлять. Тип данных INT может хранить значение от -2 147 483 648 до 2 147 483 647.

Практическое использование типа данных INT включает его использование для подсчета значений, хранения возраста человека или использования в качестве ключа идентификатора для таблицы.

Но INT было бы не так хорошо, чтобы отслеживать терабайтное адресное пространство жесткого диска, так как тип данных INT достигает только 2 миллиардов, а нам нужно отслеживать триллионы.Для этого вы можете использовать BIGINT.

Тип данных INT используется в вычислениях. Поскольку DaysToManufacture определяется как INT, мы можем легко вычислить часы, умножив его на 24:

.

ВЫБЕРИТЕ имя, DaysToManufacture, Дней до производства * 24 в часах до производства ОТ Производство. Товар

 / * Ответ * /
ВЫБЕРИТЕ имя,
       DaysToManufacture,
       Дней до производства * 24 в часах до производства
ОТ Производство.Товар 

Здесь вы можете увидеть результаты

Результаты вычислений INT

Есть много операций и функций, которые вы можете использовать с целыми числами, которые мы рассмотрим, когда углубимся в функции.

VARCHAR и NVARCHAR — текстовые значения

Используйте VARCHAR и NVARCHAR для хранения текстовых значений переменной длины. «VARCHAR» означает символ переменной длины.

Укажите количество символов для хранения в VARCHAR или NVARCHAR в соответствии с определением столбца. Обратите внимание, что имя определено таким образом, чтобы содержать пятьдесят символов:

Определение VARCHAR, показанное в SSMS Object Explorer

. Популярным VARCHAR делает то, что значения менее пятидесяти символов занимают меньше места. Место распределяется по мере необходимости.Это отличается от типа данных CHAR , который всегда выделяет указанную длину , независимо от длины фактически сохраненных данных.

Тип данных VARCHAR обычно может хранить максимум 8000 символов. Используйте тип данных NVARCHAR для хранения текста Unicode. Поскольку символы UNICODE занимают вдвое больше места, столбцы NVARCHAR могут хранить не более 4000 символов.

Преимущество NVARCHAR перед VARCHAR в том, что он может хранить символы Unicode. Это делает удобным хранение расширенных наборов символов, подобных тем, которые используются для таких языков, как кандзи.

Базы данных, разработанные до SQL 2008, обычно используют VARCHAR; однако более современные или глобальные базы данных обычно используют NVARCHAR.

DATETIME — Дата и время

Используйте тип данных DATETIME для хранения даты и времени. Пример значения DATATIME —

.
 1968-10-23 1: 45: 37.123 

Это значение на 23 октября , , 1968, 1:45. На самом деле время точнее. Время действительно 45 минут 37.123 секунды.

Во многих случаях вам просто нужно сохранить дату. В этих случаях временная составляющая обнуляется. Таким образом, 5 ноября -го , 1972 г. —

 1972-11-05 00: 00: 00.000 

A DATETIME может хранить даты с 1 января 1753 года по 31 декабря 9999 года. Это делает DATETIME подходящим для записи дат в современном мире, но не так в случае Уильяма Шекспира.

По мере знакомства с различными встроенными функциями SQL вы сможете управлять данными.Чтобы дать вам представление, мы будем использовать функцию ГОД для подсчета сотрудников, нанимаемых каждый год. Если задано значение DATETIME, функция YEAR возвращает год.

. Мы будем использовать запрос

.

ВЫБЕРИТЕ ГОД (HireDate) HireDateYear, Количество (*) HireDateCount ОТ HumanResources.Employee ГРУППА ПО ГОДУ (HireDate) ЗАКАЗ ПО ГОДУ (HireDate)

 / * Ответ * /
ВЫБЕРИТЕ ГОД (HireDate) HireDateYear,
         Количество (*) HireDateCount
ОТ HumanResources.Наемный рабочий
ГРУППА ПО ГОДУ (HireDate)
ЗАКАЗ ПО ГОДУ (HireDate) 

Преимущество заключается в том, что тип DATETIME гарантирует, что значения являются действительными датами. Как только это будет подтверждено, мы сможем использовать множество функций для вычисления количества дней между датами, месяца даты и т. Д.

Мы подробно рассмотрим эти различные функции в другой статье блога.

DECIMAL и FLOAT — десятичные точки

Используйте типы данных DECIMAL и FLOAT для работы с десятичными значениями, такими как 10.3.

Я поместил DECIMAL и FLOAT в одну категорию, поскольку они оба могут обрабатывать значения с десятичными точками; однако они оба делают это по-разному:

Если вам нужны точные значения, например, при работе с финансовыми или бухгалтерскими данными, используйте DECIMAL. Причина в том, что тип данных DECIMAL позволяет вам определять количество сохраняемых десятичных знаков.

ДЕСЯТИЧНЫЙ

Типы данных DECIMAL определяются точностью и масштабом. Точность определяет общее количество сохраняемых цифр; тогда как масштаб определяет количество цифр справа от десятичной точки.

Тип данных DECIMAL задан как DECIMAL (точность, масштаб).

Тип данных DECIMAL может содержать не более 38 цифр. Точность и масштаб должны соответствовать следующему соотношению

 0 <= масштаб <= точность <= 38 цифр 

В таблице Production.Product тип данных столбца веса определен как DECIMAL (8,2). Первая цифра - точность, вторая - масштаб.

Вес определяется как восемь цифр, две из которых справа от десятичной точки.Мы рассмотрим следующий пример запроса, чтобы проиллюстрировать, как этот тип данных.

ВЫБЕРИТЕ РАЗЛИЧНЫЙ вес ОТ ПРОИЗВОДСТВА. ГДЕ Вес МЕЖДУ 29.00 и 189.00 ЗАКАЗАТЬ ПО ВЕСУ DESC

 / * Ответ * /
ВЫБЕРИТЕ РАЗЛИЧНЫЙ вес
ОТ ПРОИЗВОДСТВА.
ГДЕ Вес МЕЖДУ 29.00 и 189.00
ЗАКАЗАТЬ ПО ВЕСУ DESC 

ПОПЛАВОК

Где типы данных DECIMAL отлично подходят для точных чисел, FLOAT действительно хороши для длинных числовых значений.Хотя значение DECIMAL может состоять из 38 цифр, для многих инженерных и научных приложений этого недостаточно. FLOAT занимает первое место в научных приложениях, где встречаются экстремальные числовые значения!

FLOATS имеют диапазон от - 1.79E + 308 до 1.79E + 308. Это означает, что наибольшее значение может быть 179, за которым следуют 306 нулей (действительно большое!).

Из-за того, как данные с плавающей запятой хранятся в компьютере (см. Спецификацию IEEE 754 с плавающей запятой), сохраненное число является очень близким приближением.Для многих приложений этого достаточно.

Из-за приблизительного поведения избегайте использования операторов <> и = в предложении WHERE. Это заявление сожгло администраторов баз данных!

 ГДЕ масса = 2,5 

Их ожидание оказывается разбитым, когда предполагается, что масса равна 2,5, но на самом деле в компьютере оно сохраняется как 2,499999999999999; следовательно, не равно 2.500000000000000!

Такова природа компьютеров с плавающей запятой. Мы с тобой видим 2.499999999999999 и думаю, что для практических целей это 2,5, но для компьютера были отключены совсем немного. J

BIT - логическое значение или значения Да / Нет

Бывают случаи, когда вам просто нужно запомнить, «есть» ли что-то или «нет». Например, активен ли сотрудник. Именно в этих случаях тип данных BIT становится самостоятельным. Этот тип данных имеет одно из трех состояний: 1, 0 или NULL.

Значение 1 означает ИСТИНА, а 0 - ЛОЖЬ.

В этом запросе мы перечисляем все должности с оплачиваемой должностью

ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ НАЗВАНИЕ ЗАДАНИЯ ОТ HumanResources.Наемный рабочий ГДЕ SalariedFlag = 1

 ВЫБРАТЬ ОТЛИЧИТЕЛЬНОЕ НАЗВАНИЕ ЗАДАНИЯ
ОТ HumanResources.Employee
ГДЕ SalariedFlag = 1 

Мы могли бы также использовать «True» вместо 1. Вот тот же пример с «True»

 ВЫБРАТЬ ОТЛИЧИТЕЛЬНОЕ НАЗВАНИЕ ЗАДАНИЯ
ОТ HumanResources.Employee
ГДЕ SalariedFlag = 'True' 

И наоборот, используя "False"

 ВЫБРАТЬ ОТЛИЧИТЕЛЬНОЕ НАЗВАНИЕ ЗАДАНИЯ
ОТ HumanResources.Employee
ГДЕ SalariedFlag = 'False' 

Я предпочитаю использовать 1 и 0, так как их легче набирать, но если вы стремитесь к удобочитаемости, то хорошими вариантами будут «True» и «False».

Справочник по типам данных SQL Server

Этот лист содержит простой справочник по ограничениям и преимуществам для каждого типа данных SQL Server. В SQL Server существует множество типов данных sql. Знание ограничений и преимуществ каждого типа данных sql скоро окупится.

Пример льгот

Выбор типа данных sql tinyint вместо int для столбца ProductType со значениями от 1 до 10 позволит сэкономить три байта на запись.Со 100 000 записей вы сэкономите 300 000 байт. Это не так много с точки зрения дискового пространства («хранилище дешево и т. Д.»), Но у вас, вероятно, будут индексы, содержащие этот столбец , и если этот индекс занимает меньше памяти , ядро ​​базы данных будет обрабатывать этот индекс гораздо более эффективно в каждом «присоединиться» и «где» и т. д.

Таким образом, запросы будут выполнять быстрее , снимут блокировки раньше (если есть) и будут использовать меньше системных ресурсов (память и ЦП). Это улучшит работу всего сервера, так как будет доступно больше ресурсов для других целей.

Если вы изучите доступные типы данных sql и потратите несколько дополнительных минут на разработку схемы, это приведет к более быстрому выполнению запросов и общей более производительной базе данных.

Типы данных SQL

Справочный лист

Столбцы с именами 8, 9, 10 и 11 указывают на поддержку типа данных версии SQL Server, где

  • 8 = SQL Server 2000
  • 9 = SQL Server 2005
  • 10 = SQL Server 2008
  • 11 = SQL Server 2012

Примечание о точности

Пространство, занимаемое записями значений типов, определяющих точность (Float, Decimal, DateTime2 и т. Д.), Всегда одинаково.Именно определение столбца определяет, сколько места занимает каждая запись, а не размер самого значения. Таким образом, десятичное (25,5) значение 999.999 занимает 13 байтов, а не 5 байтов. Даже значение NULL займет 13 байтов. Столбец фиксированной длины. Несмотря на то, что это может показаться плохим, при работе с данными фиксированной длины производительность ЦП увеличивается (также помните, что деревья индексов содержат эти значения и требования к хранилищу фиксированной длины).

Еще одно соображение заключается в том, что при суммировании значения, основанного на точности, тип данных результирующих суммированных значений будет таким же (если не приведен), что и определение столбца, и может произойти арифметическое переполнение.Если вы знаете, что ваши значения будут, например, находиться в диапазоне от 0 до 999,99, нет смысла с точки зрения пространства не определять его как Decimal (9,2) в любом случае (определение наивысших 5 байтов). Таким образом, у вашего итогового результата будет больше свободного места, и вы, возможно, сможете избежать некоторых кастингов. С точки зрения ограничений Decimal (5,2) может быть более подходящим, но, возможно, требования ограничений не следует путать с решениями о типах данных (ну, это еще одно обсуждение, выходящее за рамки этой статьи).

Мой лучший совет: «Определите свою точность как высшую точку, прежде чем требования к хранилищу увеличатся» .

Сводка

Потратьте некоторое время на изучение этих типов данных sql. Правильно используемые типы данных sql улучшат производительность, сэкономят место на диске и сократят время резервного копирования. Это также поможет обеспечить последовательную структуру. Выбор типов данных sql действительно является важной частью ограничения схемы базы данных и сообщения о предполагаемом использовании.

Справочные листы типов данных для конкретных версий

Справочный лист по типам данных SQL Server был извлечен в конкретных версий листов.Они находятся в следующих местах: SQL Server 2012, SQL Server 2008, SQL Server 2005 и SQL Server 2000.

типов данных SQL | Advanced SQL

В этом уроке мы рассмотрим:

Типы данных

Из предыдущих уроков вы узнали, что определенные функции работают с одними типами данных, но не работают с другими. Например, COUNT работает с любым типом данных, но SUM работает только с числовыми данными (если это вам не знакомо, вам следует вернуться к этому уроку.На самом деле это сложнее, чем кажется: для использования SUM данные должны быть числовыми, но они также должны быть сохранены в базе данных в числовой форме.

Вы можете столкнуться с этим, например, если у вас есть столбец, который выглядит полностью числовым, но содержит пробелы или запятые. Да, оказывается, что числовые столбцы не могут содержать запятые. Если вы загружаете данные в Mode с запятыми в столбце, полном чисел, Mode будет рассматривать этот столбец как нечисловой.Как правило, числовые типы столбцов в различных базах данных SQL не поддерживают запятые или символы валюты . Чтобы усложнить задачу, базы данных SQL могут хранить данные во многих различных форматах с разным уровнем точности.

Тип данных INTEGER , например, хранит только целые числа - без десятичных. С другой стороны, тип данных DOUBLE PRECISION может хранить от 15 до 17 значащих десятичных цифр (почти наверняка больше, чем вам нужно, если вы не физик).Типов данных очень много, поэтому перечислять их все здесь нет смысла. Чтобы просмотреть полный список, щелкните здесь.

Вот список точных типов данных, хранящихся в режиме:

Импортируется как Сохраняется как С этими правилами
Строка VARCHAR (1024) Любые символы с максимальной длиной поля 1024 символа.
Дата / время ВРЕМЯ ВРЕМЕНИ Сохраняет значения года, месяца, дня, часа, минуты и секунды в формате ГГГГ-ММ-ДД чч: мм: сс.
Номер ДВОЙНАЯ ТОЧНОСТЬ Числовое, с точностью до 17 значащих цифр после запятой.
логическое значение БУЛЕВЫЙ Только значения ИСТИНА или ЛОЖЬ.

«Импортировано как» относится к типам, выбранным в потоке импорта (см. Изображение ниже), «Сохранено как» относится к официальному типу данных SQL, а в третьем столбце объясняются правила, связанные с типом данных SQL. .

Изменение типа данных столбца

Безусловно, лучше всего с самого начала хранить данные в оптимальном формате, но если это не так, вы всегда можете изменить его в своем запросе. Например, даты или числа особенно часто хранятся в виде строк. Это становится проблематичным, если вы хотите суммировать столбец и получаете сообщение об ошибке, потому что SQL читает числа как строки. Когда это произойдет, вы можете использовать CAST или CONVERT , чтобы изменить тип данных на числовой, что позволит вам произвести сумму.

Вы можете добиться этого с помощью двух разных типов синтаксиса. Например, CAST (имя_столбца как целое число) и имя_столбца :: целое число дают одинаковый результат.

Вы можете заменить целое число любым другим типом данных, который имеет смысл для этого столбца - все значения в данном столбце должны соответствовать новым типам данных.

Сообщество режима

(сайт, который вы используете для изучения этого руководства) выполняет неявное преобразование в определенных обстоятельствах, поэтому типы данных редко могут вызывать проблемы.Однако, если вы обращаетесь к внутренней базе данных (например, вашего работодателя), вам может потребоваться осторожность при управлении типами данных для некоторых функций.

Отточите свои навыки SQL

Практическая задача

Преобразуйте столбцы financial_total_usd и found_at_clean в таблице tutorial.crunchbase_companies_clean_date в строки (формат varchar), используя разные функции форматирования для каждого из них.

Попробуй это Посмотреть ответ .