SQL Function--zhuan
Oracle:
1.當天為當年的第幾天
select to_char(sysdate,'ddd') from dual
2.向前減去一段時間
A. 向前減去7天
select sysdate,sysdate - interval '7' day from dual
B. 向前減去7小時
select sysdate,sysdate - interval '7' hour from dual
C. 向前減去7分鐘
select sysdate,sysdate - interval '7' minute from dual
D. 向前減去7個月的時間
select sysdate,sysdate - interval '7' month from dual
E. 向前減去7年的時間
select sysdate,sysdate - interval '7' year from dual
F. 時間乘以一個數字(向前減去16個小時)
select sysdate,sysdate -8*interval '2' hour from dual
3. 日期到字符的操作
select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss‘) from dual
select sysdate,to_char(sysdate,’yyyy-mm-dd hh:mi:ss‘) from dual
select sysdate,to_char(sysdate,‘yyyy-ddd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,‘yyyy-mm iw-d hh:mi:ss’) from dual
4. 字符到日期的操作,就是上面的反操作了.
5. 显示Two Hundred Twenty-Two
select to_char( to_date(222,'J'),'Jsp') from dual
6. 求某天是星期幾
select to_char(to_date('2005-08-26','yyyy-mm-dd'),'day') from dual
7. 日期格式冲突问题
A. 输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
B. 或者在to_date中写
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
C. 注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多, 可查看
select * from nls_session_parameters
select * from V$NLS_PARAMETERS
8. 求某月的最後一天是幾號
select last_day(to_date('to_date('2006/06/01','yyyy/mm/dd') ) from dual
9. 求得某年有多少天
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual //就是用下一年的第一天 減去 當年的第一天
10. 閏年處理方法
select to_char(last_day(to_date('02'||to_char(sysdate,'yyyy'),'mmyyyy')),'dd') from dual //如果得到的是28,那就不是閏年
11. next_day(sysdate,n)
( n = 1,2,3,4,5,6,7 分別對應的是 周日,周一,周二,周三,周四,周五,周六)
SQL Server
1. SELECT CONVERT(varchar(100), GETDATE(), 120) :2006-05-16 10:57:49
2. SELECT CONVERT(varchar(100), GETDATE(), 112) : 20060516
3. SELECT CONVERT(varchar(100), GETDATE(), 111) :2006/05/16
4. SELECT CONVERT(varchar(100), GETDATE(), 110) :05-16-2006
5. SELECT CONVERT(varchar(100), GETDATE(), 108) :10:57:49
6. SELECT CONVERT(varchar(100), GETDATE(), 101) :05/16/2006
7. SELECT CONVERT(varchar(100), GETDATE(), 102) :2006.05.16
8. SELECT CONVERT(varchar(100), GETDATE(), 103) :16/05/2006
.字符串函?
?度与分析用
datalength(Char_expr) 返回字符串包含字符?,但不包含后面的空格
substring(expression,start,length) 不多?了,取子串
right(char_expr,int_expr) 返回字符串右?int_expr?字符
字符操作?
upper(char_expr) ??大?
lower(char_expr) ??小?
space(int_expr) 生成int_expr?空格
replicate(char_expr,int_expr)复制字符串int_expr次
reverse(char_expr) 反?字符串
stuff(char_expr1,start,length,char_expr2) ?字符串char_expr1中的?
start?始的length?字符用char_expr2代替
ltrim(char_expr) rtrim(char_expr) 取掉空格
ascii(char) char(ascii) ?函???,取ascii?,根据ascii?取字符
字符串查找
charindex(char_expr,expression) 返回char_expr的起始位置
patindex("%pattern%",expression) 返回指定模式的起始位置,否??0
2.??函?
abs(numeric_expr) 求??值
ceiling(numeric_expr) 取大于等于指定值的最小整?
exp(float_expr) 取指?
floor(numeric_expr) 小于等于指定值得最大整?
pi() 3.1415926.........
power(numeric_expr,power) 返回power次方
rand([int_expr]) ?机??生器
round(numeric_expr,int_expr) 安int_expr?定的精度四舍五入
sign(int_expr) 根据正?,0,??,,返回+1,0,-1
sqrt(float_expr) 平方根
3.日期函?
getdate() 返回日期
datename(datepart,date_expr) 返回名?如 June
datepart(datepart,date_expr) 取日期一部份
datediff(datepart,date_expr1.dateexpr2) 日期差
dateadd(datepart,number,date_expr) 返回日期加上 number
上述函?中datepart的
?法 取值和意?
yy 1753-9999 年份
qq 1-4 刻
mm 1-12 月
dy 1-366 日
dd 1-31 日
wk 1-54 周
dw 1-7 周几
hh 0-23 小?
mi 0-59 分?
ss 0-59 秒
ms 0-999 毫秒
日期??
convert()
4.系?函?
suser_name() 用?登?名
user_name() 用?在?据?中的名字
user 用?在?据?中的名字
show_role() ??前用?起作用的??
db_name() ?据?名
object_name(obj_id) ?据??象名
col_name(obj_id,col_id) 列名
col_length(objname,colname) 列?度
valid_name(char_expr) 是否是有效??符
跨庫查詢
SELECT * from OpenRowSet('MSDASQL','Driver=SQL Server;Server=servername;Uid=username;PWD=password',databasename.dbo.tablename)
select * into beol.dbo.Calendar_day from calendar_day //Copy Table Structure and Data
select top 0 * into beol.dbo.Calendar_day from calendar_day //Just Copy Table Structure