sql轉換函數
A. 在sql中怎樣把字元型的數據轉換成日期型的呢
1、首先點擊「開始」——「Microsoft SQL Server 2005」——「Microsoft SQL Server Management Studio」。
B. SQL語句,資料庫中,我要將字元串轉換為數值應該用什麼函數。
Int(number) : 轉換為小於或等於接收參數的最大整數值,
CInt(number) :轉換為表達式為Integer 型的數值,
CLng(number): 轉換為表達式為Long 型的數值,
Fix(number) :去掉參數的小數部分並傳回,
cCur(number) :轉換為 Currency 子類型的數值
以上請選擇使用。
C. 常用的sql函數
--數據操作
2
3 SELECT --從資料庫表中檢索數據行和列
4 INSERT --向資料庫表添加新數據行
5 DELETE --從資料庫表中刪除數據行
6 UPDATE --更新資料庫表中的數據
7
8 --數據定義
9
10 CREATE TABLE --創建一個資料庫表
11 DROP TABLE --從資料庫中刪除表
12 ALTER TABLE --修改資料庫表結構
13 CREATE VIEW --創建一個視圖
14 DROP VIEW --從資料庫中刪除視圖
15 CREATE INDEX --為資料庫表創建一個索引
16 DROP INDEX --從資料庫中刪除索引
17 CREATE PROCEDURE --創建一個存儲過程
18 DROP PROCEDURE --從資料庫中刪除存儲過程
19 CREATE TRIGGER --創建一個觸發器
20 DROP TRIGGER --從資料庫中刪除觸發器
21 CREATE SCHEMA --向資料庫添加一個新模式
22 DROP SCHEMA --從資料庫中刪除一個模式
23 CREATE DOMAIN --創建一個數據值域
24 ALTER DOMAIN --改變域定義
25 DROP DOMAIN --從資料庫中刪除一個域
26
27 --數據控制
28
29 GRANT --授予用戶訪問許可權
30 DENY --拒絕用戶訪問
31 REVOKE --解除用戶訪問許可權
32
33 --事務控制
34
35 COMMIT --結束當前事務
36 ROLLBACK --中止當前事務
37 SET TRANSACTION --定義當前事務數據訪問特徵
38
39 --程序化SQL
40
41 DECLARE --為查詢設定游標
42 EXPLAN --為查詢描述數據訪問計劃
43 OPEN --檢索查詢結果打開一個游標
44 FETCH --檢索一行查詢結果
45 CLOSE --關閉游標
46 PREPARE --為動態執行准備SQL 語句
47 EXECUTE --動態地執行SQL 語句
48 DESCRIBE --描述准備好的查詢
49
50 ---局部變數
51 declare @id varchar(10)
52 --set @id = 'sp'
53 select @id = 'sp'
54
55 ---全局變數
56 ---必須以@@開頭
57 --IF ELSE
58 declare @x int @y int @z int
59 select @x = 1 @y = 2 @z=3
60 if @x > @y
61 print 'x > y' --列印字元串'x > y'
62 else if @y > @z
63 print 'y > z'
64 else print 'z > y'
65 --CASE
66 use pubs
67 update employee
68 set e_wage =
69 case
70 when job_level = 』1』 then e_wage*1.08
71 when job_level = 』2』 then e_wage*1.07
72 when job_level = 』3』 then e_wage*1.06
73 else e_wage*1.05
74 end
75 --WHILE CONTINUE BREAK
76 declare @x int @y int @c int
77 select @x = 1 @y=1
78 while @x < 3
79 begin
80 print @x --列印變數x 的值
81 while @y < 3
82 begin
83 select @c = 100*@x + @y
84 print @c --列印變數c 的值
85 select @y = @y + 1
86 end
87 select @x = @x + 1
88 select @y = 1
89 end
90 --WAITFOR
91
92 --例 等待1 小時2 分零3 秒後才執行SELECT 語句
93
94 waitfor delay 』01:02:03』
95 select * from employee
96
97 --例 等到晚上11 點零8 分後才執行SELECT 語句
98
99 waitfor time 』23:08:00』
100
101
102SELECT
103
104 select *(列名) from table_name(表名) where column_name operator value ex宿主)
105 select * from stock_information where stockid = str(nid)
106 stockname = 'str_name'
107 stockname like '% find that %'
108 stockname like '[a-zA-Z]%' --------- ([]指定值的范圍)
109 stockname like '[^F-M]%' --------- (^排除指定范圍)
110 --------- 只能在使用like關鍵字的where子句中使用通配符)
111 or stockpath = 'path'
112 or stocknumber < 1000
113 and stockindex = 24
114 not stocksex = 'man'
115 stocknumber between 20 and 100
116 stocknumber in(10,20,30)
117 order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
118 order by 1,2 --------- by列號
119 stockname = (select stockname from stock_information where stockid = 4)
120 --------- 子查詢
121 --------- 除非能確保內層select只返回一個行的值
122 --------- 否則應在外層where子句中用一個in限定符
123 select distinct column_name form table_name
124 --------- distinct指定檢索獨有的列值,不重復
125 select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
126 select stockname , "stocknumber" = count(*) from table_name group by stockname
127 --------- group by 將表按行分組,指定列中有相同的值
128 having count(*) = 2 --------- having選定指定的組
129
130 select *
131 from table1, table2
132where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
133 table1.id =* table2.id -------- 右外部連接
134 select stockname from table1
135 union [all] -------- union合並查詢結果集,all-保留重復行
136 select stockname from table2
137
138 insert
139
140 insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx"
141 value (select Stockname , Stocknumber from Stock_table2)
142 -------value為select語句
143
144 update
145
146 update table_name set Stockname = "xxx" [where Stockid = 3]
147 Stockname = default
148 Stockname = null
149 Stocknumber = Stockname + 4
150
151 delete
152
153 delete from table_name where Stockid = 3
154 truncate table 表名 --------- 刪除表中所有行,仍保持表的完整性
155 drop table table_name --------- 完全刪除表
156
157 alter table -------- 修改資料庫表結構
158
159 alter table database.owner.table_name add column_name char(2) null ..
160 sp_help 表名 -------- 顯示表已有特徵
161 create table table_name (name char(20), age smallint, lname varchar(30))
162 insert into table_name select -------- 實現刪除列的方法(創建新表)
163 alter table table_name drop constraint Stockname_default
164 --------- 刪除Stockname的default約束
165
166
167常用函數(function)
168轉換函數
169convert(數據類型,值,格式)
170
171 統計函數
172
173 AVG --求平均值
174 COUNT --統計數目
175 MAX --求最大值
176 MIN --求最小值
177 SUM --求和
178 STDEV()
179
180 --STDEV()函數返回表達式中所有數據的標准差
181 --STDEVP()
182 --STDEVP()函數返回總體標准差
183
184 VAR()
185
186 --VAR()函數返回表達式中所有值的統計變異數
187
188 VARP()
189
190 --VARP()函數返回總體變異數
191
192 算術函數
193
194 三角函數
195
196 SIN(float_expression) --返回以弧度表示的角的正弦
197 COS(float_expression) --返回以弧度表示的角的餘弦
198 TAN(float_expression) --返回以弧度表示的角的正切
199 COT(float_expression) --返回以弧度表示的角的餘切
200
201 反三角函數
202
203 ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
204 ACOS(float_expression) --返回餘弦是FLOAT 值的以弧度表示的角
205 ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
206 ATAN2(float_expression1,float_expression2)
207 ------返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
208 DEGREES(numeric_expression)
209 ------把弧度轉換為角度返回與表達式相同的數據類型可為
210 ------INTEGER/MONEY/REAL/FLOAT 類型
211 RADIANS(numeric_expression)
212------把角度轉換為弧度返回與表達式相同的數據類型可為
213
214 ------INTEGER/MONEY/REAL/FLOAT 類型
215 EXP(float_expression) --返回表達式的指數值
216 LOG(float_expression) --返回表達式的自然對數值
217 LOG10(float_expression)--返回表達式的以10 為底的對數值
218 SQRT(float_expression) --返回表達式的平方根
219
220 取近似值函數
221
222 CEILING(numeric_expression)
223-------返回>=表達式的最大整數返回的數據類型與表達式相同可為
224 -------INTEGER/MONEY/REAL/FLOAT 類型
225 FLOOR(numeric_expression)
226-------返回<=表達式的最小整數返回的數據類型與表達式相同可為
227 -------INTEGER/MONEY/REAL/FLOAT 類型
228 ROUND(numeric_expression)
229-------返回以integer_expression 為精度的四捨五入值返回的數據
230 -------類型與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
231 ABS(numeric_expression)
232-------返回表達式的絕對值返回的數據類型與表達式相同可為
233 -------INTEGER/MONEY/REAL/FLOAT 類型
234 SIGN(numeric_expression)
235-------測試參數的正負號返回0 零值1 正數或-1 負數返回的數據類型
236 -------與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
237 PI() -------返回值為π 即3.1415926535897936
238 RAND([integer_expression])
239-------用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數
240字元串函數
241
242 ASCII() ------函數返回字元表達式最左端字元的ASCII 碼值
243 CHAR() ------函數用於將ASCII 碼轉換為字元
244 ------如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
245 LOWER() ------函數把字元串全部轉換為小寫
246 UPPER() ------函數把字元串全部轉換為大寫
247 STR() ------函數把數值型數據轉換為字元型數據
248 LTRIM() ------函數把字元串頭部的空格去掉
249 RTRIM() ------函數把字元串尾部的空格去掉
250 LEFT(),RIGHT(),SUBSTRING() --函數返回部分字元串
251 CHARINDEX(),PATINDEX() --函數返回字元串中某個指定的子串出現的開始位置
252 SOUNDEX() ------函數返回一個四位字元碼
253 ------SOUNDEX函數可用來查找聲音相似的字元串但SOUNDEX函數對數字和漢字均只返回0 值
254 DIFFERENCE() ------函數返回由SOUNDEX 函數返回的兩個字元表達式的值的差異
255 ------0 兩個SOUNDEX 函數返回值的第一個字元不同
256 ------1 兩個SOUNDEX 函數返回值的第一個字元相同
257 ------2 兩個SOUNDEX 函數返回值的第一二個字元相同
258 ------3 兩個SOUNDEX 函數返回值的第一二三個字元相同
259 ------4 兩個SOUNDEX 函數返回值完全相同同
260 QUOTENAME() ------函數返回被特定字元括起來的字元串
261
262 /**//**//**//*select quotename('abc', '{') quotename('abc')
263 運行結果如下
264
265 {
266 {abc} [abc]*/
267 REPLICATE() ------函數返回一個重復character_expression 指定次數的字元串
268 /**//**//**//*select replicate('abc', 3) replicate( 'abc', -2)
269
270 運行結果如下
271
272 abcabcabc NULL*/
273 REVERSE() ------函數將指定的字元串的字元排列順序顛倒
274 REPLACE() ------函數返回被替換了指定子串的字元串
275 /**//**//**//*select replace('abc123g', '123', 'def')
276
277 運行結果如下
278
279 abcdefg*/
280
281 SPACE() ------函數返回一個有指定長度的空白字元串
282 STUFF() ------函數用另一子串替換字元串指定位置長度的子串
283
284 數據類型轉換函數
285
286 CAST() 函數語法如下
287 CAST() ( AS [ length ])
288 CONVERT() 函數語法如下
289 CONVERT() ([ length ], [, style])
290 select cast(100+99 as char) convert(varchar(12), getdate())
291
292 運行結果如下
293 199 Jan 15 2000
294
295 日期函數
296
297 DAY() ------函數返回date_expression 中的日期值
298 MONTH() ------函數返回date_expression 中的月份值
299 YEAR() ------函數返回date_expression 中的年份值
300 DATEADD( , ,)
301 -----函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
302 DATEDIFF( , ,)
303 -----函數返回兩個指定日期在datepart 方面的不同之處
304
305 DATENAME( , ------函數以字元串的形式返回日期的指定部分
306 DATEPART( , ------函數以整數值的形式返回日期的指定部分
307 GETDATE() ------函數以DATETIME 的預設格式返回系統當前的日期和時間
308
309 系統函數
310
311 APP_NAME() ------函數返回當前執行的應用程序的名稱
312 COALESCE() -----函數返回眾多表達式中第一個非NULL 表達式的值
313 COL_LENGTH(<'table_name'>, <'column_name'> ----函數返回表中指定欄位的長度值
314 COL_NAME(, ----函數返回表中指定欄位的名稱即列名
315 DATALENGTH() -----函數返回數據表達式的數據的實際長度
316 DB_ID(['database_name']) ------函數返回資料庫的編號
317 DB_NAME(database_id) ------函數返回資料庫的名稱
318 HOST_ID() -----函數返回伺服器端計算機的名稱
319 HOST_NAME() -----函數返回伺服器端計算機的名稱
320 IDENTITY([, seed increment]) [AS column_name])
321 --IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
322 /**//**//**//*select identity(int, 1, 1) as column_name
323 into newtable
324 from oldtable*/
325
326 ISDATE() ----函數判斷所給定的表達式是否為合理日期
327 ISNULL(, --函數將表達式中的NULL 值用指定值替換
328 ISNUMERIC() ----函數判斷所給定的表達式是否為合理的數值
329 NEWID() ----函數返回一個UNIQUEIDENTIFIER 類型的數值
330 NULLIF(,
331 ----NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回xpression1 的值
D. sql中convert轉化函數的用法
說明:
使用 CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
參數
expression
是任何有效的 Microsoft® SQL Server™ 表達式。。
data_type
目標系統所提供的數據類型,包括 bigint 和 sql_variant。不能使用用戶定義的數據類型。
length
nchar、nvarchar、char、varchar、binary 或 varbinary 數據類型的可選參數。
style
日期格式樣式,藉以將 datetime 或 smalldatetime 數據轉換為字元數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型);或者字元串格式樣式,藉以將 float、real、money 或 smallmoney 數據轉換為字元數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型)。
SQL Server 支持使用科威特演算法的阿拉伯樣式中的數據格式。
在表中,左側的兩列表示將 datetime 或 smalldatetime 轉換為字元數據的 style 值。給 style 值加 100,可獲得包括世紀數位的四位年份 (yyyy)。
不帶世紀數位 (yy) 帶世紀數位 (yyyy)
標准
輸入/輸出**
- 0 或 100 (*) 默認值 mon dd yyyy hh:miAM(或 PM)
1 101 美國 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英國/法國 dd/mm/yy
4 104 德國 dd.mm.yy
5 105 義大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 或 109 (*) 默認值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美國 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 或 113 (*) 歐洲默認值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 或 120 (*) ODBC 規范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 或 121 (*) ODBC 規范(帶毫秒) yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss.mmm(不含空格)
- 130* Hijri**** dd mon yyyy hh:mi:ss:mmmAM
- 131* Hijri**** dd/mm/yy hh:mi:ss:mmmAM
* 默認值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始終返回世紀數位 (yyyy)。
** 當轉換為 datetime時輸入;當轉換為字元數據時輸出。
*** 專門用於 XML。對於從 datetime或 smalldatetime 到 character 數據的轉換,輸出格式如表中所示。對於從 float、money 或 smallmoney 到 character 數據的轉換,輸出等同於 style 2。對於從 real 到 character 數據的轉換,輸出等同於 style 1。
****Hijri 是具有幾種變化形式的日歷系統,Microsoft® SQL Server™ 2000 使用其中的科威特演算法。
詳細出處參考:http://www.jb51.net/article/20363.htm
E. 在SQL中,把字元型轉換為數值型的函數是什麼
where convert(int,字元欄位)=數值
這個試試!
where cast(age as int)=數值
F. SQL中的CONVERT函數的用法是什麼
CONVERT( 要轉換到的類型, 合法的表達式, 格式化類型 )。
G. SQL語句將字元串型轉化為整數型的函數是什麼
我關於sql函數方面的搜集資料。看了對函數你可能就會了解一些了。。。。首先樓主 寫的那條語句 絕對不能執行。。應該這樣寫
USE 資料庫名
GO
SELECT DISTINCT cuser
FROM cat
WHERE time ='' or time >'' or time <''
ORDER BY time
DESC
GO
你如果想把某列,或者某欄位 的數據 由 亂七八糟的轉換成大寫的 用這個 函數 UPPER
用法 UPPER (某欄位)
關於sql函數詳解 如下:
SQL函數,詳細描述如下: Avg函數 Avg函數,計算查詢中某一特定欄位資料的算術平均值。 語法為Avg(運算式)。運算式,可為欄位名稱、運算式、或一個函數,此函數可 以是一個內部或使用者定義的,但不能為其它的SQL函數。 Avg函數在計算時,不包含任何值為 Null 的資料。 Count函數 Count函數,計算符合查詢條件的記錄條數。 語法為Count (運算式)。運算式,可為欄位名稱、*、多個欄位名稱、運算式、 或一個函數,此函數可以是一個內部或使用者定義的,但不能為其它的SQL函數。 Count 函數於計算時,不包含任何值為 Null 的資料。 但是,Count(*) 則計算所有符合查詢條件的記錄條數,包含那些Null的資料。 如果Count(欄位名稱) 的欄位名稱為多個欄位,將欄位名稱之間使用 & 分隔。 多個欄位當中,至少有一個欄位的值不為Null的情況下,Count函數才會計算為一條 記錄。如果多個欄位都為Null,則不算是一條記錄。譬如: SELECT Count(價格 & 代號) From 產品 First/Last函數 First函數、Last函數,傳回指定欄位之中符合查詢條件的第一條、最末條記錄 的資料。 語法為First(運算式) 和 Last(運算式)。運算式,可為欄位名稱、運算式、或 一個函數,此函數可以是一個內部或使用者定義的,但不能為其它的SQL函數。 Min/Max函數 Min函數、Max函數,傳回指定欄位之中符合查詢條件的最小值、最大值。 語法為Min(運算式) 和 Max(運算式)。運算式,可為欄位名稱、運算式、或一個 函數,此函數可以是一個內部或使用者定義的,但不能為其它的SQL函數。 StDev函數 StDev函數,計算指定欄位之中符合查詢條件的標准差。 語法為StDev(運算式)。運算式,可為欄位名稱、運算式、或一個函數,此函數 可以是一個內部或使用者定義的,但不能為其它的SQL函數。 如果符合查詢條件的記錄為兩個以下時,StDev函數將傳回一個Null 值,該表示 不能計算標准差。 Sum函數 Sum函數,計算指定欄位之中符合查詢條件的資料總和。 語法為Sum(運算式)。運算式,可為欄位名稱、運算式、或一個函數,此函數可 以是一個內部或使用者定義的,但不能為其它的SQL函數。 Sum函數可使用兩個欄位資料運算式,譬如計算產品的單價及數量欄位的合計: SELECT Sum(單價 * 數量) FROM 產品 Var函數 Var函數,計算指定欄位之中符合查詢條件的變異數估計值。 語法為Var(運算式)。運算式,可為欄位名稱、運算式、或一個函數,此函數可 以是一個內部或使用者定義的,但不能為其它的SQL函數。 如果符合查詢條件的記錄為兩個以下時,Var函數將傳回一個Null 值,該表示不 能計算變異數。
H. 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。
I. sql 中時間轉換函數問題
樓主 你那樣寫肯定是不行的 後面語句是日期和整型的
我幫你改了 你按照換個寫法就沒有問題 經過測試
alter function getnextdays(@date date)
returns int
as
begin
declare @days int
--select @days=day(DATEADD(MONTH,2,@date) - day(@date))
select @days=day(DATEADD(DD,-day(GETDATE()),DATEADD(MONTH,2,@date)))
return @days
end
go
select dbo.getnextdays(GETDATE())