1.没有行号的概念。这造成很多不方便,虽然可以用自增主键来处理,可是看一下分页处理的存储过程,真是又臭又长。2.Select 语句中不能使用iif()这么一个二先一的函数,恐怕在所有的语言中都有吧?怎么到了这里就得用case来处理呢?郁闷!3.没有日期这种数据类型很多时间业务只精确到日期,关心不到时分秒,虽然可以使用自定义数据类型,但是日期的加减运算更是费劲,没办法只能用8个字符来表示。4.几乎变态式的的isnull()如果让你看一个你不了解的语言,第一反应,此函数应该检查一个变量是不是NULL,返回一个逻辑值,可在ms Sql中就这不是这样!它检查一个字段后,把字段的值返回,真是费解。这是我在学SQL中遇到的问题,希望大家也提出自己的看法.
--行号可以自己生成.
--iif() 可以用 case when 替代
--datetime类型 就是精确到秒的.日期的加减用 datediff
--isnull 是判断是否为空的函数,isnul(字段,0) 表示:如果字段表示为空,用0来表示. 和Case when 类似的.
iif , 这个没有什么好说, 用习惯了case when
日期, 单纯的日期嘛, 可以用int, 出结果的时候用 dateadd(day, 0, int的日期字段), 则无论在那里, 对日期的处理, 似乎都离不开一些函数, sql也不例外
isnull, 首先, sql没有逻辑型, 其次, 用isnull的主要目的, 在sql中还是对null的值进行处理, 而不是判断吧, 当然, 理解上可能会有些误会, 但还有个 is null , 如果两者你都知道, 我想还是不会有误会了.
所以在那里之后,我基本上对数据库都是最基本设计,涉及到处理环节,在数据层去处理!
你为什么不骂这个死“Oracle”什么都和别人的不一样呢?
起码Oracle在JDBC中的处理就和别的数据库不一样。讨论技术就讨论技术,你这样感情用事,那是省省吧!
2.Select 语句中不能使用iif()
3.没有日期这种数据类型
4.几乎变态式的的isnull()RE...
1.关系模型本身就是没有顺序的。看看关系代数就知道了。都是靠集合运算。
2.语言本身问题,习惯就好了。其实功能一样,只是CASE更结构。
3.的确很烦,我也觉得日期这一点很不人性化。
4.看看邹老大说的,isnull()和T-SQL中的IS NULL的区别。该有的功能都有了。
1.没有行号的概念
这个和Oracle的实现是一样的,就连语法都差不多,恐怕是你不会用吧?
2.Select 语句中不能使用iif()
case when有什么不好吗?
3.没有日期这种数据类型
SQL Server里面日期数据类型有两种:datetime和smalldatetime,前者精确到1/300秒,占8字节,后者精确到分钟,占4字节,日期的计算用日期函数,Oracle里面也是用日期函数,哪里不同了?
4.几乎变态式的的isnull()
isnull()本来就不是用来判断字段或变量是否为空的,它是用来对为空的值进行转换的,虽然可以达到判断的目的,但搞SQL Server开发的谁也不会用这个去判断,直接用if 变量名 is null来判断就可以了。
还有,Oracle的错误处理采用Oracle独有的方式,而MS SQL Server 2005采用与大多数编程语言一样的try-catch模式,恐怕还是SQL Server的编程更接近其它主流编程语言吧。
总觉得第一个是最好的!呵呵.如果楼主第一个用的是SQL就不会出现这些的困惑了吧!
convert(char(10),datetime,120) --2006-07-20邹老大在<<SQL Server2000经典编程>>里对日期处理有比较详细的说明,用int型存日期,用numeric型存时间.这个办法挺好
2. SQL Server不直接支持IIF,可以通过CASE实现
3. 有smalldatetime和datetime足够了,所有数据库的日期都是以数字模式存储,整数部分不就是日期了?再说你前台录入只录入日期数据库不就只存日期了?4. 你的函数使用错误,检查是否空值是用NULLIF()函数,ISNULL()是空值替换,而且NULLIF()比其它数据表中的ISNULL()函数功能更强大。关键是习惯,当年习惯了Sybase用SQL Server简直是痛苦,习惯了SQL Server发现用Oracle什么都得用命令行,更痛苦!好像现在Oracle11好点了
很少用到其他数据库
感觉还是可以的,等段时间还想转到ORACLE上去
看来还要多花功夫了
to :mengluoke(梦猪)
convert(char(10),datetime,120) --2006-07-20邹老大在<<SQL Server2000经典编程>>里对日期处理有比较详细的说明,用int型存日期,用numeric型存时间.这个办法挺好
多谢老大的指导,下次一定会用了顺便问问邹老大的<<SQL Server2000经典编程>>这个是已经出版的书还是帖?偶想看看
2.没有TOP功能 虽然有row_num
3.日期型函数一般都写成CHAR型 很恶心 转的时候还要写这个to_date
4.还有没有自增长 要写个select id_seq from dual
SQL还有个函数Nullif
NULLIF
如果两个指定的表达式相等,则返回空值。语法
NULLIF ( expression , expression )参数
expression常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的任意组合。返回类型
返回类型与第一个 expression 相同。如果两个表达式不相等,NULLIF 返回第一个 expression 的值。如果相等,NULLIF 返回第一个 expression 类型的空值。