select 表示

  select 演算



  
Oracle 以外は

select 1 + 2 

のようにして、テーブルを選択しなくても演算結果を見る事ができます

Oracle では以下のように記述します

select 1 + 2 from dual
  



  NULL が含まれる演算



  
例外無く演算結果は NULL になります

select 1 + 2 + NULL

上記結果は行は返されますが、内容は NULL です
  

氏名給与手当
浦岡 友也180000
尾浦 和之180000
原川 輝行180000
吉田 浩代180000
松内 洋樹180000
森内 春行180000
田川 正也180000
田鈴 元代180000
丸木 雅子1800005000
尾多 正美180000

社員テーブルの支給額を表示しようとすると以下のようになります

select 氏名,給与+手当 as 支給額 from 社員テーブル

氏名支給額
浦岡 友也
尾浦 和之
原川 輝行
吉田 浩代
松内 洋樹
森内 春行
田川 正也
田鈴 元代
丸木 雅子185000
尾多 正美

EXCEL と MDB での記述
  
select 氏名,
	給与 + iif(手当 is null,0,手当) as 支給額 
 from 社員テーブル

select 氏名,
	給与 + iif(isnull(手当),0,手当) as 支給額 
 from 社員テーブル

select 氏名,
	給与 + val(手当&'') as 支給額 
 from 社員テーブル
  

SQLServer での記述
  
select 氏名,
	給与 + isnull(手当,0) as 支給額 
 from 社員テーブル

select 氏名,
	給与+ coalesce(手当,0) as 支給額 
 from 社員テーブル
  

MySQL での記述
  
select 氏名,
	給与+ ifnull(手当,0) as 支給額 
 from 社員テーブル

select 氏名,
	給与+ coalesce(手当,0) as 支給額 
 from 社員テーブル
  

Oracle での記述
  
select 氏名,
	給与+ nvl(手当,0) as 支給額 
 from 社員テーブル

select 氏名,
	給与+ coalesce(手当,0) as 支給額 
 from 社員テーブル
  

PostgreSQL での記述
  
select 氏名,
	給与+ coalesce(手当,0) as 支給額 
 from 社員テーブル
  




  Case

SQL の記述内に複雑な条件を使用します

EXCEL と MDB での記述
  
select 氏名,所属,
	switch(
	所属='0001','A'
	,所属='0002','B'
	,所属<>'0002','X'
	) as 所属分類
 from 社員テーブル
  

SQLServer・MySQL・PostgreSQL での記述
  
select 氏名,所属,
	case 所属 
	when '0001' then 'A'
	when '0002' then 'B'
	else 'X'
	end as 所属分類
 from 社員テーブル

select 氏名,所属,
	case
	when 所属 = '0001' then 'A'
	when 所属 = '0002' then 'B'
	else 'X'
	end as 所属分類
 from 社員テーブル
  

Oracle での記述
  
select 氏名,所属,
	case
	when 所属 = '0001' then 'A'
	when 所属 = '0002' then 'B'
	else 'X'
	end as 所属分類
 from 社員テーブル

select 氏名,所属,
	decode(所属,
	'0001','A',
	'0002','B',
	'X'
	) as 所属分類
 from 社員テーブル
  



  部分文字列

EXCEL と MDB での記述
(※ left と right が使用できます)
  
select 氏名
	,mid(氏名,2,1) as 2文字目 
 from 社員テーブル 
 where 
	mid(氏名,2,1) = '田'

-----------------------------------------------------
文字列の長さ
-----------------------------------------------------
select 氏名
	,len(氏名) as 長さ1
	,lenb(氏名) as 長さ2 
 from 社員テーブル
  

SQLServer での記述
(※ left と right が使用できます)
  
select 氏名
	,substring(氏名,2,1) as [2文字目]
 from 社員テーブル 
 where
	substring(氏名,2,1) = '田'

-----------------------------------------------------
右から文字列を取得する場合は以下のように記述します
-----------------------------------------------------
select 氏名,len(氏名) as 長さ
	,substring(氏名,len(氏名)-2+1,2) as 右から二文字
 from 社員テーブル
  

MySQL での記述
(※ left と right が使用できます)
  
select 氏名
	,substring(氏名,2,1) as 2文字目
 from 社員テーブル 
 where
	substring(氏名,2,1) = '田'

select 氏名
	,mid(氏名,2,1) as 2文字目
 from 社員テーブル 
 where
	mid(氏名,2,1) = '田'

-----------------------------------------------------
文字列の長さを取得する場合は注意
-----------------------------------------------------
select 氏名 
	,length(氏名) as 長さ1
	,char_length(氏名) as 長さ2
 from 社員テーブル
  

Oracle での記述
  
select 氏名
	,substr(氏名,2,1) as "2文字目"
 from 社員テーブル 
 where
	substr(氏名,2,1) = '田'

-----------------------------------------------------
右から文字列を取得する場合は以下のように記述します
-----------------------------------------------------
select 氏名,length(氏名) as 長さ
	,substr(氏名,length(氏名)-2+1,2) as 右から二文字
 from 社員テーブル

-----------------------------------------------------
文字列の長さ
-----------------------------------------------------
select 氏名
	,length(氏名) as 長さ1
	,lengthb(氏名) as 長さ2
 from 社員テーブル
  

PostgreSQL での記述
  
select 氏名
	,substring(氏名,2,1) as 2文字目
 from 社員テーブル 
 where
	substring(氏名,2,1) = '田'

select 氏名
	,substr(氏名,2,1) as 2文字目
 from 社員テーブル 
 where
	substr(氏名,2,1) = '田'

-----------------------------------------------------
右から文字列を取得する場合は以下のように記述します
-----------------------------------------------------
select 氏名,length(氏名) as 長さ
	,substring(氏名,length(氏名)-2+1,2) as 右から二文字
 from 社員テーブル 

-----------------------------------------------------
文字列の長さ
-----------------------------------------------------
select 氏名
	,length(氏名) as 長さ1
	,octet_length(氏名) as 長さ2
 from 社員テーブル
  



  連結

EXCEL と MDB での記述
  
select
	性別 & ',' & 給与 
	,社員コード & ',' & 氏名 
 from 社員テーブル
  

SQLServer での記述
  
select
	cast(性別 as varchar) + ',' + cast(給与 as varchar) 
	,convert(varchar,性別) + ',' + convert(varchar,給与) 
	,社員コード + ',' + 氏名 
 from 社員テーブル
  

MySQL での記述
  
select
	concat(性別,',',給与) 
	,concat(社員コード,',',氏名)
 from 社員テーブル
  

Oracle・PostgreSQL での記述
  
select
	性別 || ',' || 給与 
	,社員コード || ',' || 氏名
 from 社員テーブル
  



  文字列日付 -> 日付型

EXCEL と MDB での記述
  
select
	date()
	,time()
	,now()
	,cdate('2000/01/01') + 100
  

SQLServer での記述
  
select
	getdate()
	,cast('2000/01/01' as datetime) + 100
	,convert(datetime,'2000/01/01') + 100
  

MySQL での記述
( バージョンによって可・不可があります )
  
4.0.17 で OK (但し、+数値で日付にならない、 + INTERVAL 1 DAY と記述します)
select
	curdate()
	,curtime()
	,now()
	,cast('2000/01/01' as datetime)

以下未確認
select
	,convert(datetime,'2000/01/01')
  

Oracle での記述
  
select
	sysdate
	,cast('2000/01/01' as date) + 100
	,to_date('2000/01/01','YYYY/MM/DD') + 100
	,to_date('20000101','YYYYMMDD') + 100
 from dual
  

PostgreSQL での記述
  
時間部分がなければ + 数値可
select
	localtime
	,date '2000/01/01' + 100
	,cast('2000/01/01' as date) + 100
	,to_date('2000/01/01','YYYY/MM/DD') + 100
	,to_date('20000101','YYYYMMDD') + 100
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ