Jadval funksiyalar
Jadval funksiyalar Table tipidagi qiymatni qaytaradi, shuning uchun bunday funksiyalarda RETURNS operatoridan keyin TABLE yoziladi:
USE SampleDb;
GO
CREATE FUNCTION EmployeesInProject (@projectNumber CHAR(4))
RETURNS TABLE
AS RETURN (SELECT FirstName, LastName
FROM Works_on, Employee
WHERE Employee.Id = Works_on.EmpId
AND ProjectNumber = @projectNumber)
Employees_in_Project funksiyasidan foydalanish quyidagi misolda keltirilgan:
USE SampleDb;
SELECT *
FROM EmployeesInProject('p3')
Natija:
Ma`lumotni bir tipdan boshqa tipga o`tkazish
Boshqa tipdagi ma`lumotlarni saqlaydigan ustunga boshqa tipdagi qiymatni tayinlaganimizda yoki har xil tipdagi ma`lumotlarni o`z ichiga olgan operasiyalarni bajarganimizda, SQL Server ma`lumotni kerakli tipga o’girishga harakat qiladi. Biroq, barcha tipni o’girishlar avtomatik ravishda SQL Server tomonidan bajarilishi mumkin emas. SQL Server quyi ustuvor tipdan yuqori ustuvor tipga bevosita o’girishni amalga oshirishi mumkin. Prioritetlar jadvali (qanchalik baland bo'lsa, ustunlik shuncha yuqori bo'ladi):
datetime
smalldatetime
float
real
decimal
money
smallmoney
int
smallint
tinyint
bit
nvarchar
nchar
varchar
char
Ya'ni, SQL Server avtomatik ravishda 100.0 (float) sonini sana va vaqtga (datetime) o’girishi mumkin.
Yuqori ustuvor tiplardan quyi ustuvor tiplarga o’girishni amalga oshirish zarur bo'lgan hollarda, bilvosita o’girish kerak. Buning uchun T-SQL ikkita funksiyani taqdim etadi: CONVERT va CAST.
CAST funksiyasi bir tipdagi ifodani boshqasiga o`zgartiradi. Uning quyidagi shakli mavjud:
CAST(ifoda AS ma`lumot_tipi)
Misol tariqasida quyidagi jadvallarni olaylik:
CREATE TABLE Products
(
Id INT IDENTITY PRIMARY KEY,
ProductName NVARCHAR(30) NOT NULL,
Manufacturer NVARCHAR(20) NOT NULL,
ProductCount INT DEFAULT 0,
Price MONEY NOT NULL
);
CREATE TABLE Customers
(
Id INT IDENTITY PRIMARY KEY,
FirstName NVARCHAR(30) NOT NULL
);
CREATE TABLE Orders
(
Id INT IDENTITY PRIMARY KEY,
ProductId INT NOT NULL REFERENCES Products(Id) ON DELETE CASCADE,
CustomerId INT NOT NULL REFERENCES Customers(Id) ON DELETE CASCADE,
CreatedAt DATE NOT NULL,
ProductCount INT DEFAULT 1,
Price MONEY NOT NULL
);
Masalan, buyurtma haqidagi ma`lumotni olishda sonli qiymat va sanani satrga o`zgartiradi:
SELECT Id, CAST(CreatedAt AS nvarchar) + '; total: ' + CAST(Price * ProductCount AS nvarchar)
FROM Orders
Convert
Transformatsiyalarning aksariyati CAST funksiyasi bilan qoplanadi. Agar sizga qo'shimcha formatlash kerak bo'lsa, unda siz CONVERT funksiyasidan foydalanishingiz mumkin. Uning quyidagi shakli mavjud:
CONVERT(ma`lumot_tipi, ifoda[, stil])
Qiymat uzatish shart bo’lmagan uchinchi parametr ma`lumotlarni formatlash uslubini belgilaydi. Ushbu parametr turli xil ma`lumot tiplari uchun turli xil talqinlarga ega bo'lgan sonli qiymatni ifodalaydi. Masalan, sana va vaqtni formatlash uchun ba'zi qiymatlar:
0 yki 100 – sana formati "Mon dd yyyy hh:miAM/PM" (boshlang’ich qiymat)
1 yoki 101 - sana formati "mm/dd/yyyy"
3 yoki 103 - sana formati "dd/mm/yyyy"
7 yoki 107 - sana formati "Mon dd, yyyy hh:miAM/PM"
8 yoki 108 - sana formati "hh:mi:ss"
10 yoki 110 - sana formati "mm-dd-yyyy"
14 yoki 114 - sana formati "hh:mi:ss:mmmm" (24-li vaqt formati)
Pul ma`lumotlarini satrga formatlash uchun ba'zi qiymatlar:
0 - sonning kasr qismida faqat ikkita raqam qoladi (boshlang’ich holat)
1 - sonning kasr qismida faqat ikkita raqam qoladi va raqamlarni ajratish uchun vergul ishlatiladi
2 - sonning kasr qismida faqat to'rtta raqam qoladi.
Masalan, buyurtmalarning sanasini va qiymatini formatlashni qaraylik:
SELECT CONVERT(nvarchar, CreatedAt, 3),
CONVERT(nvarchar, Price * ProductCount, 1)
FROM Orders
Do'stlaringiz bilan baham: |