Sqldecodesignwhenlengthconcat用法详述

2014-11-24 08:43:56 · 作者: · 浏览: 1

案例1:查询表A数据,如果某个列(PARAM_VALUE)值太长,前台不好显示,就只取前20个字符;鼠标悬浮时再用层显示全部值;

sql写法:
select
	m.PARAM_VALUE as PARAM_VALUE,
	decode(sign(length(m.PARAM_VALUE)-20),1,CONCAT(SUBSTR(m.PARAM_VALUE,0,20),'...'),m.PARAM_VALUE) as PARAM_VALUE_MSG
from tableA m 
decode()函数简介:

主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);

使用方法:

Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

From talbename

Where …

其中columnname为要选择的table中所定义的column

若只与一个值进行比较

Select monthid ,decode(sale, NULL,‘---’,sale) sale from output

sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1,

CONCAT() 的语法如下:

CONCAT(字串1, 字串2, 字串3,...): 将字串1、字串2、字串3,等字串连在一起。

请注意,Oracle的CONCAT()只允许两个参数;

换言之,一次只能将两个字串串连起来。不过,在Oracle中,我们可以用'||'来一次串连多个字串。

length() 度函 是用 找出一 字串的 度。  函 的名 在不同的 料 中不完全一 :
MySQL: LENGTH( )Oracle: LENGTH( )SQL Server: LEN( )

案例2:某销售业务,付款方式Type为人民币时,返回人民币字段值,港币则返回港币值;

SELECT
   case b.ACTURAL_PAYMENT_CURRENCY when '2' then b.BUSINESS_FEE  when '1' then b.HK_BUSINESS_FEE end as "amount_of_money"
FROM tableB  b 
CASE 的语法:在一般的 SELECT 中,其语法如下:
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁SELECT =
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁WHEN THEN
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁WHEN THEN
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁ELSE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁END

这是 CASE 的典型用法,但是使用 CASE 其实可以做更多的事情。比方说下面的 GROUP BY 子句中的 CASE:
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁SELECT 'Number of Titles', Count(*)
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁FROM titles
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GROUP BY
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price IS NULL THEN 'Unpriced'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price < 10 THEN 'Bargain'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price BETWEEN 10 and 20 THEN 'Average'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 ELSE 'Gift to impress relatives'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 END
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GO
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁你甚至还可以组合这些选项,添加一个 ORDER BY 子句,如下所示:
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁USE pubs
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GO
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁SELECT
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price IS NULL THEN 'Unpriced'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price < 10 THEN 'Bargain'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price BETWEEN 10 and 20 THEN 'Average'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 ELSE 'Gift to impress relatives'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 END AS Range,
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 Title
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁FROM titles
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GROUP BY
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price IS NULL THEN 'Unpriced'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price < 10 THEN 'Bargain'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price BETWEEN 10 and 20 THEN 'Average'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 ELSE 'Gift to impress relatives'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 END,
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 Title
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁ORDER BY
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price IS NULL THEN 'Unpriced'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price < 10 THEN 'Bargain'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 WHEN price BETWEEN 10 and 20 THEN 'Average'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 ELSE 'Gift to impress relatives'
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 END,
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁 Title
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GO
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁注意,为了在 GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。