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

SQL数据表中有savetime(smalldatetime类型)字段,表中有两条记录,savetime值为:2005-3-8 12:12:00和2005-6-6 14:02:02

 
阅读更多

SQL数据表中有savetime(smalldatetime类型)字段,表中有两条记录,savetime值为:2005-3-8 12:12:00和2005-6-6 14:02:02
我用下面语句什么也搜不出来
select * from soft where soft.savetime like'%2005-3-8%'
SQL帮助中说:
"当搜索 datetime 值时,推荐使用 LIKE,因为 datetime 项可能包含各种日期部分。例如,如果将值 19981231 9:20 插入到名为 arrival_time 的列中,则子句 WHERE arrival_time = 9:20 将无法找到 9:20 字符串的精确匹配,因为 SQL Server 将其转换为 1900 年 1 月 1 日上午 9:20。然而,子句 WHERE arrival_time LIKE '%9:20%' 将找到匹配。"
后运行下面语句SELECT soft.*, CAST(soft.savetime AS varchar(20)) AS strdatetime,
发现
SQL把smalldatetime格试转成:
03 8 2005 12:12PM
我何用 like'%2005-3-8%'搜索到2005年3月8日所有的记录?

select *
from soft
where datediff(d,soft.savetime,convert(datetime,'20050308',121))=0
----
select *
from soft
where convert(char(10),soft.savetime,121)='20050308'

2, SQL对like 操作中的特殊字符处理方法:

SQL Server查询过程中,单引号 ' 是特殊字符,所以在查询的时候要转换成双单引号 '' 。

在like操作还有以下特殊字符:下划线_,百分号%,方括号[],尖号^。

其用途如下:

下划线:用于代替一个任意字符(相当于正则表达式中的 ? )

百分号:用于代替任意数目的任意字符(相当于正则表达式中的 * )

方括号:用于转义(事实上只有左方括号用于转义,右方括号使用最近优先原则匹配最近的左方括号)

尖号:用于排除一些字符进行匹配(这个与正则表达式中的一样)

以下是一些匹配的举例,需要说明的是,只有like操作才有这些特殊字符,=操作是没有的。

a_b... a[_]b%

a%b... a[%]b%

a[b... a[[]b%

a]b... a]b%

a[]b... a[[]]b%

a[^]b... a[[][^]]b%

a[^^]b... a[[][^][^]]b%

在实际进行处理的时候,对于=操作,我们一般只需要如此替换:

' -> ''

对于like操作,需要进行以下替换(注意顺序也很重要)

[ -> [[] (这个必须是第一个替换的!!)

% -> [%] (这里%是指希望匹配的字符本身包括的%而不是专门用于匹配的通配符)

_ -> [_]

^ -> [^]

3,SQL Like 通配符特殊用法:Escape

阐述Escape 的作用:

1.使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:
WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
但是在mysql中好像不能使用"\"。
2.ESCAPE 'escape_character'
允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character 是放在通配符前表示此特殊用途的字符。
SELECT *
FROM finances
WHERE description LIKE 'gs_' ESCAPE 'S'
GO
意思就是:
比如,我们要搜索一个字符串 "g_" ,如果直接 like "g_",那么 "_"的作用就是通配符,而不是字符,结果,我们会查到比如 "ga","gb","gc",而不是我们需要的 "g_".
用 LIKE 'gs_' ESCAPE 'S' 's'表示特殊用法标志
3.create table a (name varchar(10))
go
insert into a select '11%22'
union all select '11%33'
union all select '12%33'
go
select * from a WHERE name LIKE '%/%33' ESCAPE '/' --指定用'/'符号来说明跟在其后面的通配符字符为普能字符。(第二个%是字符不是通配符来的)
go
drop table a

结果为:
name
----------
11%33
12%33

总结:

%:匹配零个及多个任意字符; _:与任意单字符匹配; []:匹配一个范围; [^]:排除一个范围

Symbol Meaning
like '5[%]' 5%
like '[_]n' _n
like '[a-cdf]' a, b, c, d, or f
like '[-acdf]' -, a, c, d, or f
like '[[]' [
like ']' ]
like 'abc[_]d%' abc_d and abc_de
like 'abc[def]' abcd, abce, and abcf
like '[^1-9]' 0
like '[^1-9b-z]' 0, a

对于字符串中出现的特殊字符:'%','[','[]', '_' 可以使用 '[]' 把它们包含起来,这样在匹配模式(pattern)中,它们就被当作普通字符对待了。

1. 用 like '[[]' 匹配特殊字符 '['

select 1 where '[ABCDE' like '[[]%'
2. 用 like ']' 匹配特殊字符 ']'

select 1 where ']ABCDE' like ']%'
3. 用 like '[[]]' 匹配特殊字符 '[]'

select 1 where '[]ABCDE' like '[[]]%%'
4. 用 like '[_]' 匹配特殊字符 '_'

select 1 where '_ABCDE' like '[_]%'
5. 用 like '[%]' 匹配特殊字符 '%'

select 1 where 'ABC%DE' like 'ABC[%]DE'
对于其他的特殊字符:'^', '-', ']' 因为它们本身在包含在 '[]' 中使用,所以需要用另外的方式来转义,于是就引入了 like 中的 escape 子句,另外值得注意的是:escape 可以转义所有的特殊字符。

select 1 where '^ABCDE' like '!^ABCDE' escape '!'
select 1 where '-ABCDE' like '!-ABCDE' escape '!'
select 1 where ']ABCDE' like '!]ABCDE' escape '!'

select 1 where '%ABCDE' like '\%ABCDE' escape '\'
select 1 where '%ABCDE' like '!%ABCDE' escape '!'
select 1 where '%ABCDE' like '#%ABCDE' escape '#'
select 1 where '%ABCDE' like '@%ABCDE' escape '@'

select 1 where '[ABCDE' like '![ABCDE' escape '!'
select 1 where ']ABCDE' like '!]ABCDE' escape '!'
规律就是用 escape 后面紧跟着的字符来做转义字符。 escape 后面的字符相当于 C 语言字符串中的转义字符 '\'。

最后,看一个更加复杂的匹配

select 1 where '[^A-Z]ABCDE' like '\[\^A\-Z\]%' escape '\'

为了您的安全,请只打开来源可靠的网址

打开网站 取消

来自: http://hi.baidu.com/cubeking/blog/item/dd5dc63fa54114e23c6d97e9.html



广告来啦: 女装频道 天天疯狂购 聚划算精选频道 天天疯狂购 秒杀满立减 淘宝皇冠店铺精选 女装风向标 鞋包配饰风向标 服饰箱包 天天疯狂购 点击链接支持我的博客 点击链接支持我的博客 点击链接支持我的博客 点击链接支持我的博客 手提包旅行包手提袋旅行袋 防水 大容量 女款 热卖 3个江浙沪包邮 雾花 韩版 可爱大圆点 二层双层 家用旅行便携式化妆包 手提包 2011新款 男包 大容量 旅行包 独立鞋位 运动包 单肩 手提 健身包

分享到:
评论

相关推荐

    飞恒进销存管理系统v7.21(源代码)

    2、 Pos_BillD表的字段disc的类型由int改为numeric(4,1),因为长青的折扣有3.5% 3、 QUERYFIELDS中增加产地查询条件(in_queryfields_004.sql),商品销售汇总和明细表中增加产地(RP_GoodsSale_Total.sql,vSaleDetail....

    sqlserver自定义函数

    ---在sql2005下创建测试数据表,如果是sql2005则用本段来判断数据表是否存在 ---if exists(select 1 from sys.tables where name='w01') ---drop table w01 ----开始创建测试数据库 GO create table w01(gs903 ...

    SQLSERVER 中datetime 和 smalldatetime类型分析说明

    SQL SERVER 中datetime 和 smalldatetime类型分析说明,需要的朋友可以参考下,什么时候用什么语句。

    交大 SQLSERVER2005 实用数据库上机作业(1)

     选取所有部门信息表中的信息,随机返回前3行数据。  查询基本工资介于2000到3000之间的员工姓名,输出结果按照基本工资从低到高排序。  查询员工姓名中有“海”字且雇佣时间晚于2000年1月1日的所有员工的...

    交大SQLSERVER2005实用数据库上机作业(2)

     对每个部门,求员工基本工资的平均值,并将结果存入到部门信息表中的平均工资字段中。(使用update语句)  从员工信息表中删除员工编号为“10030021”的所有信息。  从员工信息表中删除部门名称为“市场...

    数据库命名设计规范.doc

    对于有主明细的表来说,明细表必须包含两个字段:主表关键字、SN,SN字段的类型为 int型,目的为与主表关键字联合组成明细表的关键字,以及标示明细记录的先后顺序, 如1,2,3……。表必须填写描述信息,后台表名尽量...

    数据库命名设计规范(1).doc

    对于有主明细的表来说,明细表必须包含两个字段:主表关键字、SN,SN字段的类型为 int型,目的为与主表关键字联合组成明细表的关键字,以及标示明细记录的先后顺序, 如1,2,3……。表必须填写描述信息,后台表名尽量...

    数据库系统概论实验指导书.doc

    datetime,smalldatetime 对于以下数据类型就要对values值加单引号 1、字符数据类型:char,varchar,text 2、复杂的日期/时间类型数据:datetime,smalldatetime 2、常用SQL语句语法 添加语句: INSERT [INTO] table_or...

    数据库设计命名规范.docx

    表设计规范 所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary、varbinary外,必须有默认值。字符型的默认值为一个空字符值串'';数值...

    SQLServer大数据库教案设计.doc

    当几个表中 必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时, 可以使用用户定义的数据类型。请看例子 例2.1 Use Northwind Exec sp_addtype uname,'Varchar(8)', 'Not Null ' 例...

    BCP详细参数.txt

    另外,由于 SQL Server 6.5 版或更早版本不支持可为空的 bit 数据,因此 bit 列中的空值写为值 0。 -6 使用 SQL Server 6.0 或 SQL Server 6.5 数据类型执行大容量复制操作。仅为保持向后兼容性。改为使用 –V ...

    SQL2005课程设计

    SQL课程设计报告 create database SQL0911061212 on primary ( name='TEST0DATA1',filename='D:\\MyTest\\TEST0DATA1.mdf', size=4,maxsize=20,filegrowth=1 ), filegroup TESTDATA2 ( name='TEST0DATA2',...

    SQL SERVER的数据类型

    1.SQL SERVER的数据类型  数据类弄是数据的一种属性,表示数据所表示信息的类型。任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些...

    实验1-大型数据库的基本操作

    2. 此数据库包含两个数据文件,其中主数据文件的逻辑文件名为:Data1,物理文件名为Data1_data.mdf,初始大小为3MB,存放在新建目录下,增长方式为自动增长,每次增加1MB,最多增长到10MB。辅助数据文件的逻辑文件名...

    数据库表ERP表参考。仅供参考

    --考勤类型表:CheckType if exists(select * from sysobjects where name='CheckType') drop table CheckType create table CheckType ( Checkt_id int primary key identity(1,1) not null, --考勤类型 主键 自增...

    数据库设计模板.docx

    数据库设计工具 数据库存放位置 说明 数据库的命名规则 数据库名称:时代集团的英文名称time-group 表名:英文(表的用途)+下划线+英文 字段名:相关属性的英文名 逻辑设计 数据库设计模板全文共27页,当前为第3页...

    hdongix c++

    日期函数用来操作DATETIME 和SMALLDATETIME 类型的数据,执行算术运算。与其它函数一样,可以在 Select 语句的Select 和Where 子句以及表达式中使用日期函数。其使用方法如下: 文章来自学IT网:...

    sql 日期格式的显示方式

    sql 日期格式的显示方式 网页上显示日期型(smalldatetime)SQL数据,只显示日期部分:

    SQLServerdatetime数据类型设计与优化误区

    如果你是SQLServer2008,那么请你使用date吧在SQLServer2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你看到表的记录如下图所示,你最先想到的是什么呢?(图1:数据列表)你看到这些...

    数据库课程设计-学生成绩管理系统.doc

    6~表1-9所示 表1-6学生表 "列名 "数据类型 "是否允许为空 "默认值 "是否主键 " "学号 "Cher(5) "不允许 " "是 " "姓名 "Cher(6) "不允许 " " " "性别 "Cher(2) "允许 "'男' " " "出生日期 "smalldatetime ...

Global site tag (gtag.js) - Google Analytics