עבודה עם סוגי נתונים
עמודות ומשתנים המשמשים ב- Transact-SQL לכל אחד מהם יש סוג נתונים. אופן הפעולה של ערכים בביטויים תלוי בסוג הנתונים של העמודה או המשתנה שאליהם מתבצעת הפניה. לדוגמה, כפי שראית קודם לכן, + באפשרותך להשתמש באופרטור כדי לשרשר שני ערכי מחרוזת, או כדי להוסיף שני ערכים מספריים.
הטבלה הבאה מציגה סוגי נתונים נפוצים הנתמכים במסד נתונים של SQL Server.
מספר מדויק
מספריים משוערים
תו
תאריך/שעה
בינארי
אחר
tinyint
ציפה
תו
תמר
בינארי
סמן
גוון קטן
אמיתי
varchar
זמן
varbinary
מזהה הירארכיה
int
הודעת טקסט
תאריך ושעה
תמונה
sql_variant
bigint
חרם ת"א
תאריך ושעה2
טבלה
סיבית
תותב תות
smalldatetime
חותמת זמן
עשרוני/מספרי
ntext
תאריך/שעהoffset
מזהה ייחודי
מספריים
xml
כסף
גיאוגרפיה
מיתון תות
גיאומטריה
הערה
לקבלת פרטים נוספים על סוגי הנתונים השונים והתכונות שלהם, בקר בתיעודTransact-SQL לעיון.
המרת סוג נתונים
ניתן להמיר ערכים תואמים של סוגי נתונים באופן משתמע כנדרש. לדוגמה, + נניח שבאפשרותך להשתמש באופרטור כדי להוסיף מספר שלם למספר עשרוני, או כדי לשרשר ערך תו באורך קבוע וערך varchar באורך משתנה. עם זאת, במקרים מסוימים ייתכן שיהיה עליך להמיר באופן מפורש ערכים מסוג נתונים אחד לאחר - לדוגמה, + ניסיון להשתמש כדי לשרשר ערך varchar וערך עשרוני התוצאה תהיה שגיאה, אלא אם תמיר תחילה את הערך המספרי לסוג נתונים תואם של מחרוזת.
הערה
המרות משתמעות ומפורשות חלות על סוגי נתונים מסוימים, והמרות מסוימות אינן אפשריות. לקבלת מידע נוסף, השתמש בתרשים בתיעודTransact-SQL לעיון.
T-SQL כולל פונקציות שיעזרו לך להמיר באופן מפורש בין סוגי נתונים
CAST ו- TRY_CAST
הפונקציה CAST ממירה ערך לסוג נתונים שצוין אם הערך תואם לסוג הנתונים המשמש כיעד. תוחזר שגיאה אם היא אינה תואמת.
לדוגמה, השאילתה הבאה משתמשת ב- CAST כדי להמיר את ערכי המספרים השלם בעמודה ProductID לערכים varchar (עם 4 תווים לכל היותר) כדי לשרשר אותם עם ערך אחר מבוסס תווים:
SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;
תוצאה אפשרית מהשאילתה עשויה להיראות כך:
שם מוצר
680: מסגרת כביש HL - שחור, 58
706: מסגרת כביש HL - אדום, 58
707: ספורט-100 קסדה, אדום
708: ספורט-100 קסדה, שחור
...
עם זאת, נניח שהעמודה גודל בטבלה Production.Product היא עמודה מסוג nvarchar (אורך משתנה, נתוני טקסט Unicode) המכילה כמה גדלים מספריים (כגון 58) וגדלים מסוימים מבוססי טקסט (כגון "S", "M" או "L"). השאילתה הבאה מנסה להמיר ערכים מעמודה זו לסוג נתונים של מספר שלם:
SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;
שאילתה זו התוצאה של הודעת השגיאה הבאה:
שגיאה: ההמרה נכשלה בעת המרת ערך nvarchar 'M' לסוג נתונים int.
מאחר שלפחות חלק מהערכים בעמודה הם מספריים, ייתכן שתרצה להמיר ערכים אלה ולהתעלם מהערכים האחרים. באפשרותך להשתמש בפונקציה TRY_CAST להמיר סוגי נתונים.
SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;
הפעם התוצאות ייראו כך:
גודל מספרי
58
58
NULL
NULL
...
הערכים שניתן להמיר לסוג נתונים מספריים מוחזרים כערכים עשרוניים, והערכים שאינם תואמים מוחזרים כ- NULL, המשמשים כדי לציין שערך אינו ידוע.
הערה
נבחן שיקולים לטיפול בערכי NULL בהמשך יחידה זו.
CONVERT ו- TRY_CONVERT
הפונקציה CAST היא פונקציית ה- SQL הסטנדרטית ANSI להמרה בין סוגי נתונים ומשמשת במערכות רבות של מסדי נתונים. ב- Transact-SQL, באפשרותך גם להשתמש בפונקציה CONVERT, כפי שמוצג כאן:
SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;
שוב, שאילתה זו מחזירה את הערך שהומר לסוג הנתונים שצוין, באופן הבא:
שם מוצר
680: מסגרת כביש HL - שחור, 58
706: מסגרת כביש HL - אדום, 58
707: ספורט-100 קסדה, אדום
708: ספורט-100 קסדה, שחור
...
כמו CAST, ל- CONVERT TRY_CONVERT משתנה שמחזיר NULL עבור ערכים לא תואמים.
יתרון נוסף בשימוש ב- CONVERT over CAST הוא ש- CONVERT כולל גם פרמטר המאפשר לך לציין סגנון עיצוב בעת המרת ערכים מספריים וערכים של תאריכים במחרוזות. לדוגמה, שקול את השאילתה הבאה:
SELECT SellStartDate,
CONVERT(varchar(20), SellStartDate) AS StartDate,
CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate
FROM SalesLT.Product;
התוצאות מהשאילתה עשויות להיראות כך:
תאריך התחלה של SellStart
תאריך התחלה
תאריך התחלה מעוצב
2002-06-01T00:00:00.0000000
1 ביוני 2002 בשעה 12:00
6/1/2002
2002-06-01T00:00:00.0000000
1 ביוני 2002 בשעה 12:00
6/1/2002
2005-07-01T00:00:00.0000000
1 ביולי 2005 בשעה 12:00
7/1/2005
2005-07-01T00:00:00.0000000
1 ביולי 2005 בשעה 12:00
7/1/2005
...
...
...
הערה
לקבלת מידע נוסף על קודי עיצוב הסגנון שבהם באפשרותך להשתמש עם CONVERT, עיין בתיעודTransact-SQL לעיון.
ניתוח מבנה טקסט TRY_PARSE
הפונקציה PARSE מיועדת להמיר מחרוזות מעוצבות המייצגות ערכים מספריים או ערכי תאריך/שעה. לדוגמה, שקול את השאילתה הבאה (המשתמשת בערכים ליטרליים במקום בערכים מעמודות בטבלה):
SELECT PARSE('01/01/2021' AS date) AS DateValue,
PARSE('$199.99' AS money) AS MoneyValue;
התוצאות של שאילתה זו ייראו כך:
DateValue
ערך כסף
2021-01-01T00:00:00.0000000
199.99
בדומה ל- CAST ול- CONVERT, הפונקציה PARSE TRY_PARSE משתנה שמחזירה ערכים שאינם תואמים כ- NULL.
הערה
בעת עבודה עם סוגי נתונים עשרוניים או מספריים, ייתכן שיהיה עליך לעגל למספר שלם או להגדיר את הנקודה העשרונית, שניתן להשיג באמצעות דיוק וקנה מידה. כדי להבין טוב יותר את המושג הזה של דיוק וקנה מידה, עיין בתיעודTransact-SQL לעיון.
STR
הפונקציה STR ממירה ערך מספרי ל- varchar.
לדוגמה:
SELECT ProductID, '$' + STR(ListPrice) AS Price
FROM Production.Product;
התוצאות ייראו בערך כך:
מזהה מוצר
מחיר
680
$1432.00
706
$1432.00
707
$35.00
...
...