`
chorpin
  • 浏览: 132169 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

select * from dual (转)

阅读更多
T-SQL是SQL Server的语言引擎,而Oracle的语言引擎却是PLSQL。这两种查询语言都对ANSI SQL-92标准进行了扩展以提供额外的支持力度。你所创建的应用程序几乎都要用到这些补充特性。本文就对最常用的、非标准的Oracle扩展进行了说明,同时还要介绍下如何对这些扩展进行转化以用在SQL Server环境下。

列的选择

用PLSQL执行数据查询的时候,FROM子句是必须的,这同SQL Server的要求是一样的。 SELECT语句必须选择针对的数据表。在Oracle数据库内有一种特殊的表Dual。Dual表是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select中。Dual表由Oracle连同数据字典一同创建,所有的用户都可以用名称DUAL访问该表。这个表里只有一列DUMMY,该列定义为VARCHAR2(1)类型,有一行值X。从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,由于DUAL只有一行数据,所以常数只返回一次。

Oracle下的DUAL查询如下所示:
SELECT ‘x’ FROM dual
而对等的SQL Server查询则是下面这个样子:
SELECT ‘x’

以下是null相关的知识,用到了dual:
SQL> select 1 from dual where null=null;
没有查到记录
SQL> select 1 from dual where null='';
没有查到记录
SQL> select 1 from dual where ''='';
没有查到记录
SQL> select 1 from dual where null is null;
1
---------
1
SQL> select 1 from dual where nvl(null,0)=nvl(null,0);
1
---------
1
查看当前连接用户
SQL> select user from dual;

查看当前日期、时间
SQL> select sysdate from dual;

连接

Oracle用|| 符号作为连接符,而SQL Server的连接符是加号:+ 。

Oracle查询如下所示:
Select ‘Name’ || ‘Last Name’ From tableName

对应的SQL Server查询如下所示:
Select ‘Name’ + ‘Last Name’


数字取舍

Oracle数据库内有一个TRUNC函数,该函数返回m位十进制数的n位;如果省略m则n就是0位。m的值可以为负,表示截去小数点左边m位数字。

在SQL Server下可以用Round或者Floor。

以下是Oracle查询:
SELECT TRUNC(15.79,1) "Truncate" FROM DUAL;

下面是同类查询的SQL Server版本:
SELECT ROUND(15.79, 0) rounded , ROUND(15.79, 0,1) truncated
SELECT FLOOR(ROUND(15.79, 0)), FLOOR(ROUND(15.79, 0,1) )


数字转换

Oracle的TO_CHAR函数可以把n位NUMBER数据类型转换为VARCHAR2 数据类型,同时采用可选的数字格式。

SQL Server则通过STR函数返回数字转换之后的字符数据。不过,该函数不具方便的Format参数。

Oracle查询如下:
SELECT to_char(123.45 ,99999999999999) from tab
SELECT to_char(EXPIRY_DATE,'DDMONYYYY') from tab

以下是SQL Server版本的查询:
SELECT STR(123.45, 14)
SELECT STR(round(123.455 , 2),12,2)
SELECT CAST(REPLACE((CONVERT(varchar(12) , EXPIRYDATE, 106 )),' ' , '') as varchar(9))


LENGTH和LEN

以下是Oracle的查询:
SELECT LENGTH('SQLMAG') "Length in characters" FROM DUAL;

以上查询在SQL Server下是这样写的:
SELECT LEN('SQLMAG') "Length in characters"


日期

以上两种系统都具有各自的当前日期和时间格式。

Oracle取得日期和采用如下方式:
SYSDATE

SQL Server则是这样的:
GETDATE()

你可以用各种语法操作日期。以下的代码对Oracle日期值中的月份进行了格式调整(返回日期再加上n月):
Select add_months(sysdate,12) from dual

SQL Server则是如下完成同等功能的:
Select dateadd(mm,12,getdate())

数据的减法也不同。以下代码在Oracle中直接对数据进行减法操作:
SELECT sysdate -add_months(sysdate,12) FROM dual

SQL Server则是这样做的:
SELECT datediff(dd, GetDate(),dateadd(mm,12,getdate()))




oracle 改变序列当前值

SQL> select seq.nextval from dual;
NEXTVAL
----------
21
SQL> alter sequence seq increment by 79;
序列已更改。

SQL> select seq.nextval from dual;
NEXTVAL
----------
100
SQL> alter sequence seq increment by 1;
序列已更改。

SQL> select seq.nextval from dual;
NEXTVAL
----------
101
SQL>
__________________
序列好象不能修改当前值


其中round函数说明:

ROUND函数是四舍五入函数,返回数字表达式并四舍五入为指定的长度或精度。

语法:
ROUND ( numeric_expression , length [ , function ] )
参数:
numeric_expression
精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
length
是 numeric_expression 将要四舍五入的精度。length 必须是 tinyint、smallint 或int。当 length 为正数时,numeric_expression 四舍五入为 length 所指定的小数位数。当 length 为负数时,numeric_expression 则按 length 所指定的在小数点的左边四舍五入。
function
是要执行的操作类型。function 必须是 tinyint、smallint 或 int。如果省略 function 或 function 的值为 0(默认),numeric_expression 将四舍五入。当指定 0 以外的值时,将截断 numeric_expression。
返回类型
返回与 numeric_expression 相同的类型。
注释
ROUND 始终返回一个值。如果 length 是负数且大于小数点前的数字个数,ROUND 将返回 0


示例
Result
  Remark

select round(748.58,-1)
750.00
从小数点左边第1位四舍五入,其他位为0

select round(748.58,-2)
700.00
从小数点左边第2位四舍五入,其他位为0

select round(748.58,-3)
1000.00
从小数点左边第3位四舍五入,其他位为0

select round(748.58,-4)
0
length 是负数且大于小数点前的数字个数,ROUND 将返回 0

select round(748.58,1)
748.60
四舍五入为length所指定的小数位数

select round(748.58,2)
748.58
四舍五入为length所指定的小数位数

select round(124.9994,3)
124.9990
四舍五入为length所指定的小数位数

select round(124.9995,3)
125.0000
四舍五入为length所指定的小数位数

select round(150.75,0)
151.00
四舍五入的结果

select round(150.75,0,1)
150.00
截断的结果



转自:http://blog.csdn.net/wngvo/archive/2007/09/18/1789205.aspx
分享到:
评论

相关推荐

    dual虚表 select语法规则

    SELECT TRIM('a' FROM 'aaabcdeaaafxyzaaa') FROM dual; ``` 这将返回字符串'bcdeaaafxyz'。 * LPAD和RPAD函数:左补齐或右补齐字符串,例如: ```sql SELECT LPAD(ename, 20, '-') FROM emp LIMIT 1; SELECT RPAD...

    ORACLE EBS常用表及查询语句(最终整理版)

    select fnd_profile.VALUE('ORG_ID') FROM DUAL; ``` 此SQL语句可以获取当前登录用户的组织ID,这对于后续查询特定组织的数据非常重要。 ##### 2.3 查询指定组织的运营单位 ```sql select * from hr_operating_...

    10.Oracle虚表1

    - **序列生成器**:创建并使用序列,例如创建一个名为`SEQ_FREECPLUS`的序列,然后获取其下一个值:`SELECT SEQ_FREECPLUS.NEXTVAL FROM DUAL`,以及当前值:`SELECT SEQ_FREECPLUS.CURRVAL FROM DUAL`。...

    oracle数据库常见99条的查询语句

    - **SQL语句**: `SELECT UPPER('hello') FROM dual;` - **说明**: 使用`UPPER`函数将小写字母转换为大写。 以上列举了Oracle数据库中常见的查询语句及其功能说明,这些查询语句覆盖了基础查询、条件筛选、数据排序...

    (精)Oracle常用傻瓜问题1000问

    - `SELECT TO_DATE('2003/08/01') FROM DUAL;` - **描述**:将字符串转换为日期格式。 - `SELECT TO_CHAR(SYS2003-10-17, 'D') FROM DUAL;` - **描述**:返回该年的第几天。 - `SELECT TO_CHAR(SYS2003-10-17, '...

    oracle之dual表的一些

    SQL> SELECT SYSDATE FROM DUAL; ``` 上述SQL语句用于查询当前系统日期。 2. **执行单行计算:**当我们需要对某个数值进行计算并显示结果时,可以使用`DUAL`表作为数据源。 ```sql SQL> SELECT 1 + 1 FROM ...

    oracle函数

    SELECT TRIM(LEADING '9' FROM '9998767999') S1, TRIM(TRAILING '9' FROM '9998767999') S2, TRIM('9' FROM '9998767999') S3 FROM dual; ``` - **ASCII值**: `ASCII` 和 `CHR`。 ```sql SELECT ASCII('a') ...

    oracle自学笔记-视频实例整理

    - **UPPER()转换为大写**:`SELECT UPPER('hello') FROM dual;` - **LOWER()转换为小写**:`SELECT LOWER(ename) FROM emp;` 通过以上示例,我们不仅学习了如何执行基本的SQL查询,还掌握了如何使用各种SQL函数和...

    详解Oracle数据库中DUAL表的使用

    SELECT USER FROM DUAL; ``` 查看当前日期、时间 使用 DUAL 表可以查看当前日期、时间,语句如下: ```sql SELECT SYSDATE FROM DUAL; ``` 作为计算器使用 使用 DUAL 表可以作为计算器,语句如下: ```sql SELECT 1+...

    SqlParser 一个利用正则表达式解析单句SQL的类

    先看要解析的样例SQL语句: 代码如下: select * from dual SELECT * frOm dual Select C1,c2 From tb select c1,c2 from tb select count(*) from t1 select c1,c2,c3 from t1 where condi1=1 Select c1,c2,c3 From ...

    PLSQL常用方法汇总

    SELECT trunc(sysdate) FROM dual; ``` - **GREATEST**: 返回日期列表中最晚的日期。 ```sql SELECT greatest('01-JAN-04', '04-JAN-04', '10-FEB-04') FROM dual; ``` #### 2. 字符函数 - **SUBSTR**: 字符...

    SQL语法大全及实例.pdf

    - 当表中没有实际参与计算的数据时,可以使用 `FROM dual` 来代替,如:`SELECT 2 * 3 FROM dual;` - **获取当前日期**: - `SELECT SYSDATE FROM dual;` - `SYSDATE` 函数用于获取数据库服务器上的当前日期和...

    oracle常用语句

    - **`SELECT SYSDATE FROM dual;`**:查询当前Oracle系统时间。 #### 二、表操作 - **`CREATE TABLE`**:创建新表。 - **`CLEAR SCREEN`**:清除屏幕输出,便于查看新的SQL执行结果。 - **`COMMIT`**:提交事务,...

    Oracle常用语句

    - **语法**: `select initcap('HELLOWORLD') from dual;` - **功能**: 将字符串首字母转换为大写,其余字母转换为小写。 #### 31. 字符串拼接 - **语法**: `select concat('hello', 'world') from dual;` - **功能*...

    从SQL语句的角度提高数据库的访问性能.docx

    - 正确做法:`SELECT * FROM dual;` - 错误做法:`SELECT * FROM DUAL;` 或 `SELECT * FROM dual; ` - 解析差异会导致不必要的解析开销,因此应确保所有SQL语句的写法一致。 2. **减少SQL语句的嵌套层次** - *...

    Oracle高级SQL培训与讲解

    SELECT '张娜' SNAME, 99 SCORE FROM DUAL UNION SELECT '王杰', 35 FROM DUAL UNION SELECT '宋丽', 85 FROM DUAL UNION SELECT '陈晓', 73 FROM DUAL UNION SELECT '李元', 100 FROM DUAL ) SELECT * FROM ...

Global site tag (gtag.js) - Google Analytics