Типы данных, управляющие конструкции языка и функции Transact - SQL .
Похожие статьи вашей тематики
Типы данных и преобразование типов.
Встроенные и определённые пользователем типы данных хранятся в текущей базе данных в таблице systypes и могут быть просмотрены командой
SELECT * FROM systypes
1. Бинарные: требуется указывать числа в 16-ричном виде, например 0х FF. binary (n) – n определяет количество байт для хранения (до 8000 байт); под каждое значение будет выделено указанное количество байт вне зависимости от фактических размеров данных. varbinary (n) – n определяет максимальное количество байт для хранения (до 8000 байт); если массив данных m < n, то фактически отводится m +4 байта, если m > n, то данные усекаются до размера поля. image – хранятся бинарные данные размером до 2 31 -1 байт (~2 Гбайт), память выделяется страницами по 8000 байт. Использование этого поля оправдано, если требуется хранить очень длинные данные. Специальных функции отображения содержимого полей этого типа SQL Server не имеет.
Пример: DECLARE @ VA binary (10), @ VB varbinary (10) SELECT @ VA = 0 xFF, @ VB = 0 xAC SELECT 'Значение переменной VA: ' = @ VA, 'Значение переменной VB: ' = @ VB SELECT 'Длина VA: ' = DATALENGTH (@ VA), 'Длина VB: ' = DATALENGTH (@ VB)
2. Символьные: интерпретируются в зависимости от того, какая кодовая страница была установлена при инсталляции сервера. char (n) – n <=8000, ASCII символы (1 байт), резервируется всегда n символов, если размер данных меньше, строка дополняется пробелами справа. varchar (n) – то же что и char (n), но резервируется максимум n символов. Если размер данных m < n, то дополнения пробелами не происходит. nchar (n) – n <=4000, Unicode символы (2 байта), остальное как в char (n). nvarchar (n) – n <=4000, Unicode символы (2 байта), остальное как в varchar (n).
Примеры: DECLARE @ name nvarchar (25) SET @ name = N 'Д''Артаньян' SELECT @ name -- Что получится в каждом из столбцов? SELECT 1+1,'1'+'1','1'+'2'+3
Типичные функции для работы со строками: LEN (…) – возвращает длину строки в символах; LTRIM (…) и RTRIM (…) – удаляет пробелы в начале и в конце строки SUBSTRING (…) – возвращает подстроку из строки REPLACE (…) – заменяет подстроку указанным значением
3. Текстовые: позволяют хранить достаточно большие объёмы текстовой информации text – хранение ASCII текстовых блоков размером <=2 31 -1 символов (~2 Гбайт), выделяемых постранично. ntext – хранение Unicode текстовых блоков размером <=2 30 -1 символов (~1 Гбайт), выделяемых постранично.
Некоторые функции для работы с текстовыми полями: SUBSTRING (…) – возвращает подстроку текстового поля; READTEXT (…) – считывает данные из текстового поля; DATALENGTH (…) – возвращает количество байт, занимаемых данными;
4. Целочисленные: следует учитывать, что результат вычисления выражения приводится к типу данных, имеющих максимальный размер из всех участвующих в выражении. Результатом деления целого на целое будет целое с отброшенной дробной частью. tinyint – диапазон данных от 0 до 255 (длина поля 1 байт). smallint – диапазон данных от -2 15 до 2 15 -1 (длина поля 2 байта). int или integer – диапазон данных от -2 31 до 2 31 -1 (длина поля 4 байта). bigint – диапазон данных от -2 63 до 2 63 -1 (длина поля 8 байт).
5. Нецелочисленные: с фиксированной и плавающей точкой. dec или decimal [(p [, s ])] или numeric [(p [, s ])] – диапазон от –(10 38 -1) до (10 38 -1). Содержит фиксированное количество знаков до и после точки: p – общее число знаков, s – число знаков после точки (0 <= s <= p <= 38). Длина поля от 5 до 17 байт. float [(n)] – число в виде мантиссы и порядка. Максимальный диапазон от -1.79 308 до 1.79 308. Значение n определяет количество бит, используемых для хранения мантиссы (n <=53). Длина поля 4 или 8 байт. double precision – частный случай float (53). real – частный случай float (24). Диапазон данных от -3.4 38 до 3.4 38.
Примеры: DECLARE @VR real SET @VR=1.23E4 SELECT @VR, DATALENGTH(@VR)
Не рекомендуется указывать нецелочисленные типы данных в конструкциях WHERE и для построения индексов или первичных ключей, так как скорость обработки таких полей существенно ниже чем целочисленных Преобразование типов данных из числа в строку: DECLARE @VR float, @VS varchar(20) SET @VR=3.14 SET @VS=STR(@VR,4,2)+'15' – простая функция преобразования типов SELECT @VS
SET @VS=CAST($123.45 AS varchar(10)) – универсальная функция преобразования SELECT @VS SELECT CAST ('$54321' AS money) Взаимозаменяемой для функции CAST является функция CONVERT Некоторые функции для работы с числовыми типами: ISNUMERIC (…) – проверяет, имеет ли выражение числовой тип данных (1, если да); RAND () – вычисляет случайное число с плавающей точкой в диапазоне [0…1]; POWER (…) – возведение числа в степень (SELECT power(2,8)); PI (…) – возвращает значение Пи.
6. Даты и времени: типы данных позволяют одновременно хранить время и дату. datetime – В первых 4 байтах хранится смещение относительно 1 января 1753 г. (до этого летоисчисление шло по Григорианскому и Юлианскому календарям) до 31.12.9999. Последние 4 байта – время после полуночи с точностью 3.33 мс. smalldatetime – диапазон от 1.01.1900 до 6.06.2079 с точностью до 1 мин.
Дополнительные возможности для ввода и вывода дат предоставляет команда SET DATEFORMAT xxx, где xxx может быть: mdy, dmy, ymd, ydm, myd, dym. Примеры: SET LANGUAGE 'русский' DECLARE @ DV datetime SET @ DV ='21 октябрь 2003 23:19' SELECT @ DV
Функция ISDATE (<выражение>) возвращает 1, если <выражение> может быть правильно конвертировано в дату, и 0 в противном случае. Некоторые функции для работы с датой и временем: GETDATE () – возвращает текущее системное время; YEAR (…) – возвращает год из указанной даты; DATEADD (…) – добавляет к дате указанный временной интервал
SELECT year(getdate())
DECLARE @Str1 char(10) IF DAY (GETDATE ())<15 SET @ Str 1='первая' ELSE SET @Str1='вторая' SELECT 'Сейчас '+RTRIM(@Str1)+' половина месяца'
7. Денежные: поддерживается точность 4 знака после десятичной точки. money – диапазон от -922 337 203 685 477.5808 до +922 337 203 685 477.5807, длина 8 байт. smallmoney – диапазон от -214 748.3648 до +214 748.3647, длина 4 байта. Примеры: CREATE TABLE MyMoney ( ID bigint IDENTITY (1,1) PRIMARY KEY, Value money NULL ) INSERT MyMoney VALUES ($127.35) SELECT * FROM MyMoney Специальные: bit – данные принимают значения 0 / 1 / NULL. Память выделяется побайтно. timestamp – счетчик-идентификатор записей, уникальный в пределах одной базы данных (не имеет ничего общего с меткой времени). Длина 8 байт. Не может использоваться для объявления переменных. Не должен использоваться в составе первичного ключа. uniqueidentifier – глобально уникальный идентификатор записи (GUID). Идентификатор уникален в масштабе планеты. Представляет собой 16-байтовую последовательность, составляющуюся с помощью функции NEWID () из MAC -адреса сетевой карты и внутреннего таймера процессора. sysname – предназначен для хранения имён объектов баз данных SQL Server – столбцов, таблиц, индексов, представлений, хранимых процедур и др. sql _ variant – позволяет в одном и том же столбце хранить значения любого другого доступного типа данных (за исключением text, ntext, image, timestamp, cursor, table и самого sql _ variant) Пример: DECLARE @Var1 int, @Var2 nvarchar(15), @Var3 datetime, @VA sql_variant SET @Var1=10 SET @Var2='Просто строка' SET @Var3='23.08.1969' SET @VA=@Var1+5 SELECT @VA SET @VA=@Var2 SELECT @VA SET @VA=@Var3 SELECT @VA Функция SQL _ VARIANT _ PROPERTY возвращает информацию о природе данных, хранящихся под типом sql _ variant.
cursor – ссылка на объект базы данных – курсор. Подробнее о курсорах см. далее. table – временная таблица (массив). Может использоваться только для переменных и значений, возвращаемых функциями пользователя.
Пример: DECLARE @VarTable TABLE ( Col1 int NOT NULL IDENTITY (1,1) PRIMARY KEY, Col2 nvarchar(15) ) INSERT INTO @VarTable (Col2) VALUES (' Первая строка ') SELECT * FROM @VarTable
1. Пользовательские типы данных: также возможно создавать в MS SQL Server. Для этих целей предусмотрена специальная хранимая процедура sp _ addtype. Первым параметром при вызове этой процедуры указывается имя пользовательского типа, вторым – имя системного типа, на основе которого строится пользовательский. Третий параметр указывает, разрешены или запрещены значения NULL. Пример:
sp_addtype nvc15, 'nvarchar(15)', NONULL
|