SQL語法比較

出自 ProgWiki
前往: 導覽搜尋

SQL語法比較,以下列舉出一些使用SQL語法的資料在使用時的SQL語法差異。

字串

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
轉英文大寫 upper(s) upper(s) upper(s)
ucase(s)
upper(s) upper(s) ucase(s) upper(s)
轉英文小寫 lower(s) lower(s) lower(s)
lcase(s)
lower(s) lower(s) lcase(s) lower(s)
關鍵字搜尋
(不存在為0,
存在則大於或等於1)
instr(s,t) charindex(s,t) posstr(s,t) position(t in s) instr(s,t)
locate(s,t)
position(t in s)
instr(s,t) position(t in s)
子字串 substr(s,n,m) substring(s,n,m) substr(s,n,m) substr(s,n,m)
substring(s,n,m)
substring(s from n for m)
substring(s,n,m)
substring(s from n for m)
substring(s,n,m)
結合字串 s1 || s2 s1 + s2 s1 || s2 s1 || s2 concat(s1,s2) s1 + s2
字串長度 LENGTH(s) len(s) LENGTH(s) len(s)
字串裡是否含有非ASCII字元? if (len(s) <> datalength(s))
if (len(convert(varchar(max),s)) <> datalength(convert(varchar(max),s)))

日期與時間

現在

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
現在日期與時間 current_timestamp current_timestamp
getdate()
current timestamp current_timestamp
now()
current_timestamp
now()
now() current_timestamp
現在日期 current_date
sysdate
current date current_date current_date
sysdate()
current_date
現在時間 current_time current time current_time current_time current_time
  • 備註: Oracle在select時, 如無來源table的話, 須用 from dual 例如 select sysdate from dual

日期或時間分解後的值

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
extract(year from d) year(d)
datepart(year,d)
year(d) date_part('year',d)
extract('year' from d)
year(d)
extract(year from d)
year(d)
datepart(year,d)
季(1~4) datepart(quarter, d)
datepart(qq, d)
quarter(d) date_part('quarter',d)
extract('quarter' from d)
quarter(d)
月(1~12) extract(month from d) month(d)
datepart(month,d)
month(d) date_part('month',d)
extract('month' from d)
month(d)
extract(month from d)
month(d)
datepart(month,d)
日(1~31) extract(day from d) day(d)
datepart(day,d)
day(d) date_part('day',d)
extract('day' from d)
dayofmonth(d)
extract(day from d)
day(d)
datepart(day,d)
時(0~23) extract(hour from d) datepart(hour,d) hour(d) date_part('hour',d)
extract('hour' from d)
hour(d)
extract(hour from d)
hour(d)
datepart(hour,d)
分(0~59) extract(minute from d) datepart(minute,d) minute(d) date_part('minute',d)
extract('minute' from d)
minute(d)
extract(minute from d)
minute(d)
datepart(minute,d)
秒(0~59) extract(second from d) datepart(second,d) second(d) date_part('second',d)
extract('second' from d)
second(d)
extract(second from d)
second(d)
datepart(second,d)

日期或時間的增值或減值

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
月+/-n add_months(d,n) dateadd(mm,n,d) date_add(d, interval n month)
date_sub(d, interval n month)
dateadd(mm,n,d)
日+/-n dateadd(dd,n,d) date_add(d, interval n day)
date_sub(d, interval n day)
dateadd(dd,n,d)

轉換

Hash值

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
MD5 詳見備註1 HashBytes('MD5', str) md5(str) MD5(str)
SHA1 HashBytes('SHA1', str) SHA1(str)
  • 備註1:(Oracle用的自訂md5函數)
CREATE OR REPLACE FUNCTION MD5(str IN VARCHAR2)  
RETURN   VARCHAR2
IS
  retval   VARCHAR2(32);
BEGIN
  retval   :=   UTL_RAW.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING   =>   str));
  RETURN   retval;
END;

Binary轉Hex字串

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
Binary轉Hex字串 RAWTOHEX(bin) sys.fn_VarBinToHexStr(bin)

ASCII碼

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
字元轉ASCII碼 ascii(c) ascii(c) ascii(c) ascii(c) ascii(c) asc(c)
ASCII碼轉字元 chr(n) char(n) chr(n) chr(n) char(n) chr(n)

UNICODE碼

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
字元轉ASCII碼 unicode(c)
UNICODE碼轉字元 nchr(n) nchar(n)


日期或時間轉字串

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
格式yyyy.mm.dd to_char(d,'YYYY.MM.DD') convert(varchar,d,102) to_char(d,'YYYY.MM.DD') date_format(d,'%Y.%m.%d')
格式yyyy/mm/dd to_char(d,'YYYY/MM/DD') convert(varchar,d,111) to_char(d,'YYYY/MM/DD') date_format(d,'%Y/%m/%d')
格式yyyymmdd to_char(d,'YYYYMMDD') convert(varchar,d,112) to_char(d,'YYYYMMDD') date_format(d,'%Y%m%d')

數值轉字串

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
數值轉字串 to_char(n)
cast(n as varchar2(10))
str(n)
convert(varchar,n)
cast(n as varchar)
cast(n as char(10)) to_char(n) cast(n as char)
convert(n,char)
str(n)
字串轉數值 to_number(e[,f]) convert(t,e[,s]) to_number(e,f)
  • n 數值
  • t 要轉換的類型 (例如 int 或 float ...等)
  • e 字串
  • f 轉換前的格式 (例如 '999,999' )
  • s 要轉換的格式

其他

資料清理

功能 Oracle MS-SQL Server IBM-DB2 Postgre SQL MySQL MS-Access ANSI-SQL
n為Null時,
e取代
nvl(n,e)
coalesce(n,e)
isnull(n,e)
coalesce(n,e)
coalesce(n,e) coalesce(n,e) coalesce(n,e) isnull(n,e)
Nz(n,e)
coalesce(n,e)

列舉

列舉資料庫名稱
DB種類 列舉資料庫名稱
Oracle
select distinct OWNER
 from ALL_TABLES
 where OWNER not in ('SYS','SYSTEM')
 and TABLESPACE_NAME not in ('CWMLITE','DRSYS','EXAMPLE','INDEX'
,'SYSTEM','TEMP','TOOLS','UNDOTBS','USERS','ODM','XDB')
MS-SQL Server
select name from sys.databases
 where not name in ('master','tempdb','model','msdb')
 order by name
IBM-DB2 list active databases
Postgre SQL
MySQL show databases
MS-Access
ANSI-SQL
列舉資料表名稱
DB種類 列舉Table名稱
Oracle
select OWNER || '.' || TABLE_NAME as Name
 from ALL_TABLES
 where OWNER not in ('SYS','SYSTEM')
 and TABLESPACE_NAME not in ('CWMLITE','DRSYS','EXAMPLE','INDEX'
,'SYSTEM','TEMP','TOOLS','UNDOTBS','USERS','ODM','XDB')
MS-SQL Server select name from [sysobjects] where type='U'
IBM-DB2
Postgre SQL
MySQL show tables
MS-Access
ANSI-SQL
列舉DB-Link
DB種類 列舉DB-Link
Oracle select DB_LINK as name from ALL_DB_LINKS
MS-SQL Server select name from sys.servers where is_linked=1
IBM-DB2
Postgre SQL
MySQL
MS-Access
ANSI-SQL

資料庫版本

DB種類 資料庫版本
Oracle select BANNER as SqlVer from v$version where BANNER like 'Oracle%';
MS-SQL Server select @@version as SqlVer;
IBM-DB2 select * from sysibm.sysversions
Postgre SQL select version();
MySQL select version()
MS-Access
ANSI-SQL

清除Log

DB種類 清除Log
Oracle
MS-SQL Server
USE MyDB;
BACKUP LOG MyDB WITH no_log;
DBCC SHRINKFILE (N'MyDB_Log' , 0, TRUNCATEONLY);
IBM-DB2
Postgre SQL
MySQL delete from log where date_field < '2007-12-11 00:00:00'
MS-Access
ANSI-SQL

執行SQL字串

DB種類 執行SQL字串
Oracle EXECUTE IMMEDIATE StrSQL;
MS-SQL Server EXEC SP_EXECUTESQL @StrSQL;
IBM-DB2
Postgre SQL
MySQL
MS-Access
ANSI-SQL

關於各種分頁Select

參考資料

Oracle
MS-SQL
IBM-DB2
PostgreSQL
MySQL
Microsoft Access (在SQL的語法中使用VBA的函數)
其他