Программирование >>  Руководство по sql 

1 ... 72 73 74 [ 75 ] 76 77 78 ... 105


- datalength(au fname))

+ au fname) as Personal name,

convert(varchar (40) replicate( ,

col length(authors, au lname)

- datalength(au lname)) + au lname) as Surname from authors

where au fname like A*

Personal name

Surname

Abraham Ann Akiko Anne Albert

Bennet Dull Yokomoto Ringer Ringer

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

Как указать число разрядов после десятичной точки

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

Вот как данные были введены в таблицу, содержащую столбец с типом данных с плавающей точкой:

TzTi

4444.20

22.22

333.1

А вот как выполняется отображение на одной из систем, в которой SQL убирает все нули справа:

SQL:

select *

from testfloat

Результат: one

22.1 1.1

4444.2



22.22 333.1

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

Результат: one

~22ТГ000003Г4697 1.10000002384186 4444.2001953125 22.2199993133545 333.100006103516

Во многих системах имеется функция ROUND (применяемая только для числовых типов данных). Она позволяет указать количество разрядов справа или слева от десятичного знака. При этом используется следующий синтаксис:

ROUND (чисповой столбец, целое число)

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

SQL:

select round(one, 2) from testfloat

Результат: rounded

22.1 1.1

4444.2

22.22

333.1

Единственная проблема в этом случае состоит в том, что убираются нули справа. Другой подход заключается в использовании совокупности строковых функций. Функция SUBSTRING (совместно с CONVERT, поскольку one является числовым типом данных) не может выполнить эту задачу:

SQL:

select short = substring(

convert(varchar (18), one), 1,5), one

from testfloat

Результат: short one

~22.Го 22.1000003814697

1.100 1.10000002384186

4444. 4444.2001953125



22.21 22.2199993133545

333.1 333.100006103516

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

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

Больщинство систем баз данных располагают функцией, которая находит положение одной строки в другой. В Transact-SQL такой функцией является CHARINDEX. Вот ее синтаксис:

CHARINDEX(expressionl, expression2)

Здесь expression 1 представляет собой подмножество (строка, которую вы ищете), а expression! представляет собой полное множество (строка, в которую встроено указанное подмножество).

В нащем случае expression! представляет собой десятичную точку (.), а expression! представляет собой поле one. Поскольку поле one будет использоваться внутри функции SUBSTRING, оно должно быть преобразовано в символьный тип данных. Если все эти элементы соединить вместе, то функция CHARINDEX примет следующий вид:

charindexC. , convert(varchar (18), one))

Добавьте 2 и подставьте все это в качестве третьего аргумента функции SUBSTRING. Вот как теперь будет выглядеть запрос и результаты его выполнения:

SQL:

select short = substring(

convert(varchar (18), one), 1, charindex ( . , convert(varchar (18), one)) +2), one from testfloat

Результат: short one

22.10 22.1000003814?97

1.10 1.10000002384186

4444.20 4444.2001953125

22.21 22.2199993133545

333.10 333.100006103516

Если теперь заменить +! на +1, после десятичной точки будет отображаться только один разряд. В качестве примера попытайтесь выровнять эти числа по правому краю.

РАБОТА С ШАБЛОНАМИ

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

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



1 ... 72 73 74 [ 75 ] 76 77 78 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика