Типы данных, управляющие конструкции языка и функции Transact - SQL . 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Типы данных, управляющие конструкции языка и функции 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



Поделиться:


Последнее изменение этой страницы: 2017-02-08; просмотров: 482; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.81.97.37 (0.025 с.)