1. 第133章 sql函數 STRING
將表達式轉換並連接成字元串的函數。
STRING 將一個或多個字元串轉換為 STRING 格式,然後將這些字元串連接成一個字元串。不執行大小寫轉換。
STRING 在字元串轉換之前將數字轉換為其規范形式。因此,它執行算術運算,從數字中刪除前導和尾隨零以及前導加號。
如果字元串參數之一為 NULL ,則 STRING 返回 NULL 。如果字元串參數之一是空字元串 ( '' ),則 STRING 將連接其他參數。 STRING 保留空格。
可以使用 %SQLSTRING 函數轉換數據值以進行區分大小寫的字元串比較,或使用 %SQLUPPER 函數轉換數據值以進行不區分大小寫的字元串比較。
在以下嵌入式 SQL 示例中, STRING 將三個子字元串連接成一個字元串。該示例顯示了空格、空字元串和 NULL 的處理:
在以下嵌入式 SQL 示例中, STRING 將數字轉換為字元串。所有這些 STRING 函數都返回字元串 「123」 :
在以下嵌入式 SQL 示例中, STRING 從欄位中檢索示例數據並將其連接成一個字元串:
2. SQL 中怎麼把字元串轉換為數字
可以使用函數:ISNUMERIC
當輸入表達式得數為一個有效的整數、浮點數、money 或 decimal 類型,那麼 ISNUMERIC 返回 1;否則返回 0。返回值為 1 確保可以將 expression 轉換為上述數字類型中的一種。
將字元的數字轉成數字,比如'0'轉成0可以直接用加法來實現;
若絕對比較可以這樣:
select binary 11 =binary "11ddddd";
字元集轉換:CONVERT(xxx USING gb2312);
類型轉換和SQL Server一樣,就是類型參數有點點不同 : CAST(xxx AS 類型),CONVERT(xxx,類型);
類型必須用下列的類型:BINARY、CHAR()、DATE、TIME、DATETIME、DECIMAL、SIGNED、UNSIGNED。
數據類型:
字元串數據類型是建模在形式字元串的想法上的數據類型。字元串是幾乎在所有編程語言中可以實現的非常重要和有用的數據類型。在某些語言中它們可作為基本類型獲得,在另一些語言中做為復合類型獲得。多數高級語言的語法允許通常用某種方式引用起來的字元串來表示字元串數據類型的實例;這種元字元串叫做「文本」或「字元串文本」。
以上內容參考:網路-字元串
3. SQL中的CONVERT函數的用法是什麼
CONVERT( 要轉換到的類型, 合法的表達式, 格式化類型 )。
4. sql語句會自動轉換類型嗎
會。在處理不同數轎帆據類型的值時,SQLServer會自動進行前舉隱士類型轉換。對於數據類型相近的值是有效的,比如int和float,但是對於其它數據類型,例如整型和字元類型,隱士轉換就無法實現了,此時必須使用顯示轉換。為了實現這種顯示轉換,T-SQL提供了兩個顯示轉換慧帆碧函數,分別是CAST和CONVERT函數。
5. SQL CONVERT()函數的問題
第三十一章 SQL函數 CONVERT
將給定表達式轉換為指定數據類型的函數。
CONVERT(datatype,expression[,format-code])
{fn CONVERT(expression,datatype)}
參數
expression - 要轉換的表達式。
datatype - 要將表達式轉換為的數據類型。
format - 可選-指定日期和時間格式的整數代碼,用於在日期/時間/時間戳數據類型和字元數據類型之間進行轉換。 此參數僅用於通用標量語法形式。
描述
這里描述了CONVERT函數的兩種不同實現。 兩者都將一種數據類型中的表達式轉換為另一種數據類型中的相應值。 兩者都執行日期和時間轉換。
注意:這兩個CONVERT實現中的參數以不同的順序表示。 第一個是與MS SQL Server兼容的通用 IRIS標量函數,它接受三個參數。 第二個是帶有兩個參數的 ODBC標量函數。 下面的文本將分別處理這兩種形式的CONVERT。
CONVERT(datatype,expression)支持流數據的轉換。 例如,可以將字元流欄位的內容轉換為數據類型為VARCHAR的字元串。
{fn CONVERT(expression,datatype)}不支持流數據的轉換; 指定要表達的流欄位將導致SQLCODE -37錯誤。
為兩個版本的CONVERT指定一個無效值將導致SQLCODE -141。
如果表達式沒有定義的數據類型(例如ObjectScript提供的主機變數),則其數據類型默認為字元串數據類型。
CONVERT(datatype,expression,format-code)
可以通過執行VARCHAR-to-VARCHAR轉換來截斷字元串,指定輸出字元串長度小於表達式字元串長度。
在使用CONVERT(或CAST)時,如果字元數據類型(如CHAR或VARCHAR)沒有指定長度,則默認的最大長度為30個字元。 如果二進制數據類型(如binary或VARBINARY)沒有指定長度,則默認的最大長度為30個字元。 否則,這些沒有指定長度的數據類型將被映射到一個1個字元的MAXLEN,如data types表所示。
可以執行BIT數據類型轉換。 允許的值為1、0或NULL。 如果指定任何其他值,IRIS將發出SQLCODE -141錯誤。 在下面的嵌入式SQL示例中,兩者都是一個NULL的BIT轉換:
ClassMethod Convert()
{
s a=""
&sql(
SELECT CONVERT(BIT,:a),
CONVERT(BIT,NULL)
INTO :x,:y)
w !,"SQLCODE=",SQLCODE
w !,"the host variable is:",x
w !,"the NULL keyword is:",y
}
可選的format-code參數指定日期、datetime或時間格式。 該格式既可用於定義從日期/時間/時間戳數據類型轉換為字元串時的輸出,也可用於定義從字元串轉換為日期/時間/時間戳數據類型時的輸入。 支持以下格式代碼; 輸出兩位數年份的格式代碼列在第一列; 輸出四位數年或不輸出年的格式列在第二列:
Two-digit year codes Four-digit year codes Format
以下是日期和時間轉換的特性:
取值范圍:允許的日期范圍為0001-01-01 ~ 9999-12-31。
默認值:
將時間值轉換為TIMESTAMP、POSIXTIME、DATETIME或SMALLDATETIME時,日期默認為1900-01-01。 注意,對於{fn CONVERT()},日期默認為1841-01-01。
將日期值轉換為TIMESTAMP、POSIXTIME、DATETIME或SMALLDATETIME時,時間默認為00:00:00。
Default Format:如果沒有指定Format -code, CONVERT將嘗試從指定的值確定格式。 如果不能,則默認為格式代碼100。
兩位數年份:從00到49的兩位數年份轉換為21世紀的日期(2000到2049); 從50到99的兩位數年份轉換為20世紀的日期(1950到1999)。
分數秒:分數秒前可以加句號(.)或冒號(:)。 這些符號有不同的含義:
句點是默認值,可用於所有格式代碼。 句號表示標准分數; 因此,12:00:00.4表示十分之四秒,而12:00:00.004表示千分之四秒。 分數精度的位數沒有限制。
冒號只能用於以下格式代碼值:9/109、13/113、14/114、130和131。 冒號表示後面的數字是千分之一秒; 因此12:00:00:4表示四萬分之一秒(12:00:00.004)。 冒號後面的數字限制為3位。
當指定表達式的格式無效或格式與格式代碼不匹配時,將產生SQLCODE -141錯誤。 指定一個不存在的格式代碼將返回1900-01-01 00:00:00。
{fn CONVERT(expression,datatype)}
這是ODBC標量函數。 它支持以下ODBC顯式數據類型轉換。 必須使用「SQL_」關鍵字指定這種形式的CONVERT的數據類型轉換。 在下表中,有兩組轉換數據類型,第一組轉換數據值和數據類型,第二組轉換數據類型,但不轉換數據值:
Source Conversion
SQL_VARCHAR是標準的ODBC表示。 在轉換為SQL_VARCHAR時,日期和時間被轉換為相應的ODBC表示; 數字數據類型值轉換為字元串表示。 從SQL_VARCHAR轉換時,該值必須是有效的ODBC Time、Timestamp或Date表示。
當將時間值轉換為SQL_TIMESTAMP或SQL_POSIXTIME時,未指定的日期默認為1841-01-01。 注意,對於CONVERT(),日期默認為1900-01-01。
將date值轉換為SQL_TIMESTAMP或SQL_POSIXTIME時,時間默認為00:00:00。
在這種語法形式中,小數秒前面可以加句號(.)或冒號(:)。 這些符號有不同的含義。 句號表示標准分數; 因此,12:00:00.4表示十分之四秒,而12:00:00.004表示千分之四秒。 冒號表示接下來的是千分之一秒; 因此12:00:00:4表示千分之四秒。 冒號後面的數字限制為3位。
在轉換為整數數據類型或SQL_DOUBLE數據類型時,數據值(包括日期和時間)將轉換為數字表示。 對於SQL_DATE,這是自1841年1月1日以來的天數。 對於SQL_TIME,這是自午夜以來的秒數。 當遇到非數字字元時,輸入字元串將被截斷。 整數數據類型還截斷十進制數字,返回數字的整數部分。
{fn CONVERT(expression,datatype)}不支持流數據的轉換; 指定要表達的流欄位將導致SQLCODE -37錯誤。
轉換成任何數據類型的NULL仍然是NULL。
空字元串("),或任何非數字字元串值轉換如下:
SQL_VARCHAR和SQL_TIMESTAMP返回提供的值。
數字數據類型轉換為0(零)。
SQL_DATE和SQL_TIME轉換為NULL。
CONVERT 類方法
還可以使用CONVERT()方法調用執行數據類型轉換,使用" SQL_"關鍵字指定數據類型:
$SYSTEM.SQL.Functions.CONVERT(expression,convert-to-type,convert-from-type)
如下示例所示:
WRITE $SYSTEM.SQL.CONVERT(60945,"SQL_VARCHAR","SQL_DATE")
2007-11-11
示例
CONVERT() 示例
下面的示例使用標量語法形式的CONVERT。
下面的示例比較了使用DECIMAL和DOUBLE數據類型對小數的轉換:
SELECT CONVERT(DECIMAL,-123456789.0000123456789) AS DecimalVal,
CONVERT(DOUBLE,-123456789.0000123456789) AS DoubleVal
下面的示例將字元流欄位轉換為VARCHAR文本字元串。 它還使用CHAR_LENGTH顯示字元流欄位的長度:
SELECT Notes,CONVERT(VARCHAR(80),Notes) AS NoteText,CHAR_LENGTH(Notes) AS TextLen
FROM Sample.Employee WHERE Notes IS NOT NULL
下面的例子展示了幾種將出生日期欄位(DOB)轉換為格式化字元串的方法:
SELECT DOB,
CONVERT(VARCHAR(20),DOB) AS DOBDefault,
CONVERT(VARCHAR(20),DOB,100) AS DOB100,
CONVERT(VARCHAR(20),DOB,107) AS DOB107,
CONVERT(VARCHAR(20),DOB,114) AS DOB114,
CONVERT(VARCHAR(20),DOB,126) AS DOB126
FROM Sample.Person
默認格式和代碼100格式是相同的。 因為DOB欄位不包含時間值,所以顯示時間的格式(這里包括默認值100、114和126)提供一個零值,它表示12:00AM(午夜)。 代碼126格式提供了一個不包含空格的日期和時間字元串。
{fn CONVERT()} 示例
下面的示例使用了ODBC語法形式的CONVERT。
下面的嵌入式SQL示例將混合字元串轉換為整數。 IRIS在第一個非數字字元處截斷字元串,然後將結果數字轉換為規范形式:
ClassMethod Convert1()
{
s a="007 James Bond"
&sql(SELECT {fn CONVERT(:a, SQL_INTEGER)} INTO :x)
w !,"SQLCODE=",SQLCODE
w !,"the host variable is:",x
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Convert1()
SQLCODE=0
the host variable is:7
下面的示例將「DOB」(出生日期)列中的日期轉換為SQL_TIMESTAMP數據類型。
SELECT DOB,{fn CONVERT(DOB,SQL_TIMESTAMP)} AS DOBtoTstamp
FROM Sample.Person
生成的時間戳格式為「yyyy-mm-dd hh:mm:ss」。
下面的示例將「DOB」(出生日期)列中的日期轉換為SQL_INTEGER數據類型。
SELECT DOB,{fn CONVERT(DOB,SQL_INTEGER)} AS DOBtoInt
FROM Sample.Person
下面的示例將「DOB」(出生日期)列中的日期轉換為SQL_VARCHAR數據類型。
SELECT DOB,{fn CONVERT(DOB,SQL_VARCHAR)} AS DOBtoVChar
FROM Sample.Person
生成的字元串格式為:yyyy-mm-dd。
6. SQL怎麼樣把numeric類型的數據轉換為varchar類型的數據
可以用cast來轉換。
如:列名叫grade,表名為A select cast(grade as numeric(y,x)) from A 其中y代表數據長度,x代表小數位長度。
注意:grade中必須全為數字或小數點,如果存在中文或英文,則運行時會報錯。
使用CAST函數進行數據類型轉換時,在下列情況下能夠被接受:
(1)兩個表達式的數據類型完全相同。
(2)兩個表達式可隱性轉換。
(3)必須顯式轉換數據類型。
(6)sql數據轉換函數擴展閱讀
SQL中類型轉換函數:
1、cast
cast(表達式 as 數據類型)
select 100.0 +cast('1000' as int) -- 1100.0 默認把字元串轉換成浮整形。
2、convert
convert(數據類型,表達式)
select 100.0 + convert(int,'1000')-- 1100.0 默認把字元串轉換成整形。
3、select * from student order by convert (int,bid) desc --bid列按照降序來排列,bid是varchar類型。
4、print convert(varchar(10),getdate(),120) --日期轉換varchar(10)表示顯示的字元長度,120表示style,可以在SSMS 幫助中查看詳情。
5、cast不可以轉換日期類型,convert可以通用。
7. 求SQL常用數據類型轉換函數
sql中用convert這個函數進行數據類型轉換
1.CONVERT()
函數可以用不同的格式顯示日期/時間數據。
CONVERT(data_type(length),data_to_be_converted,style)
style:
100
或者
0
mon
dd
yyyy
hh:miAM
(或者
PM)
101
mm/dd/yy
102
yy.mm.dd
103
dd/mm/yy
104
dd.mm.yy
105
dd-mm-yy
106
dd
mon
yy
107
Mon
dd,
yy
108
hh:mm:ss
109
或者
9
mon
dd
yyyy
hh:mi:ss:mmmAM(或者
PM)
110
mm-dd-yy
111
yy/mm/dd
112
yymmdd
113
或者
13
dd
mon
yyyy
hh:mm:ss:mmm(24h)
114
hh:mi:ss:mmm(24h)
120
或者
20
yyyy-mm-dd
hh:mi:ss(24h)
121
或者
21
yyyy-mm-dd
hh:mi:ss.mmm(24h)
126
yyyy-mm-ddThh:mm:ss.mmm(沒有空格)
130
dd
mon
yyyy
hh:mi:ss:mmmAM
131
dd/mm/yy
hh:mi:ss:mmmAM
例子:CONVERT(VARCHAR(10),GETDATE(),110)
2.CONVERT()
函數是把數據類型間的轉換
例子:select
CONVERT(int,'10')