עבודה עם סוגי נתונים

הושלמה

עמודות ומשתנים המשמשים ב- 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

...

...