Типы данных и преобразование типов.

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

SELECT * FROM systypes

 

  1. Бинарные: требуется указывать числа в 16-ричном виде, например 0хFF.
    binary(n) – n определяет количество байт для хранения (до 8000 байт); под каждое значение будет выделено указанное количество байт вне зависимости от фактических размеров данных.
    varbinary(n) – n определяет максимальное количество байт для хранения (до 8000 байт); если массив данных m<n, то фактически отводится m+4 байта, если m>n, то данные усекаются до размера поля.
    image – хранятся бинарные данные размером до 231-1 байт (~2 Гбайт), память выделяется страницами по 8000 байт. Использование этого поля оправдано, если требуется хранить очень длинные данные. Специальных функции отображения содержимого полей этого типа SQL Server не имеет.

    Пример:
    DECLARE @VA binary(10), @VB varbinary(10)
    SELECT @VA = 0xFF, @VB= 0xAC
    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 текстовых блоков размером <=231-1 символов (~2 Гбайт), выделяемых постранично.
    ntext – хранение Unicode текстовых блоков размером <=230-1 символов (~1 Гбайт), выделяемых постранично.

    Некоторые функции для работы с текстовыми полями:
    SUBSTRING(…) – возвращает подстроку текстового поля;
    READTEXT(…) – считывает данные из текстового поля;
    DATALENGTH(…) – возвращает количество байт, занимаемых данными;

  4. Целочисленные: следует учитывать, что результат вычисления выражения приводится к типу данных, имеющих максимальный размер из всех участвующих в выражении. Результатом деления целого на целое будет целое с отброшенной дробной частью.
    tinyint – диапазон данных от 0 до 255 (длина поля 1 байт).
    smallint – диапазон данных от -215 до 215-1 (длина поля 2 байта).
    intили integer – диапазон данных от -231 до 231-1 (длина поля 4 байта).
    bigint – диапазон данных от -263 до 263-1 (длина поля 8 байт).

  5. Нецелочисленные: с фиксированной и плавающей точкой.
    dec или decimal [(p[,s])] или numeric [(p[,s])] – диапазон от –(1038-1) до (1038-1). Содержит фиксированное количество знаков до и после точки: p – общее число знаков, s – число знаков после точки (0 <= s <= p <= 38). Длина поля от 5 до 17 байт.
    float [(n)] – число в виде мантиссы и порядка. Максимальный диапазон от -1.79308 до 1.79308. Значение n определяет количество бит, используемых для хранения мантиссы (n<=53). Длина поля 4 или 8 байт.
    double precision – частный случай float(53).
    real– частный случай float(24). Диапазон данных от -3.438 до 3.438.

    Примеры:
    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 @Str1='первая'
    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







Дата добавления: 2015-07-30; просмотров: 857;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.