CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

有点难度的问题

楼主Heister(▄︻┻┳═一)2006-02-15 10:29:33 在 .NET技术 / C# 提问

表中有一个字段   email   ,   约束位   unique  
   
  表中   有一条记录   aa.bb@cc.com  
   
  现在   要插入   另一个   email:     aa_bb@cc.com  
   
  结果报错,提示   违反   约束,   因为   在oracl   插入   aa_bb@cc.com   会以类似下面的sql去查询是否已经有相同的email  
  select   *   from   table   where   email   like   'aa_bb@cc.com'   ,在这条sql   中   _   是个通配符,匹配任意一个字符,所以   会找到   aa.bb@cc.com,   产生了冲突  
   
  这个问题要怎么解决? 问题点数:100、回复次数:12Top

1 楼bzszp(SongZip)回复于 2006-02-15 10:47:23 得分 10

SQL>   select   1   from   dual   where   'aa.bb@cc.com'   like   'aa_bb@cc.com';  
   
                    1  
  ----------  
                    1  
  SQL>   select   1   from   dual   where   'aa.bb@cc.com'   like   replace('aa_bb@cc.com','_','\_')   escape   '\';  
   
  未选定行  
   
  SQL>Top

2 楼sbaz(万神渡劫)回复于 2006-02-15 10:52:08 得分 10

select   *   from   table   where   email   like   'aa[_]bb@cc.com'Top

3 楼Heister(▄︻┻┳═一)回复于 2006-02-15 10:55:15 得分 0

我的问题是   在   表里有   aa.bb@cc.com   这个用户时,怎么插入   aa_bb@cc.com这个用户而不报错  
   
  insert   into   table   (email)   values   (aa_bb@cc.com)     这里面怎么用通配符?Top

4 楼Heister(▄︻┻┳═一)回复于 2006-02-15 10:56:32 得分 0

是   怎么用转义符Top

5 楼bzszp(SongZip)回复于 2006-02-15 11:04:22 得分 10

我觉得应该在约束里面处理Top

6 楼Heister(▄︻┻┳═一)回复于 2006-02-15 11:48:45 得分 0

怎么在约束里处理?Top

7 楼Heister(▄︻┻┳═一)回复于 2006-02-15 13:14:51 得分 0

顶哦Top

8 楼shicj(shicj)回复于 2006-02-15 14:04:19 得分 30

奇怪,我用下面的代码在oracle上试了一下,好像没问题呀。是不是你oracle数据库的版本比较老。  
  CREATE   TABLE   test5  
  (  
  USER_NAME   VARCHAR2(60)   NOT   NULL  
  )  
   
  CREATE   UNIQUE   INDEX   test5_idx   ON   test5(USER_NAME)  
   
  insert   into   test5   values('a.b')  
  insert   into   test5   values('a_b')  
  insert   into   test5   values('aa.bb.com')  
  insert   into   test5   values('aa_bb.com')  
  Top

9 楼lovelycat0512(努力学习)回复于 2006-02-15 14:37:34 得分 10

insert   into   TEST   (EMAIL)   values('aa'||chr(95)||'bb@cc.com')  
   
  chr(95)   =   '_'Top

10 楼lovelycat0512(努力学习)回复于 2006-02-15 14:40:37 得分 0

oracle有通配字符,也有转义字符,比如   ',''表示一个'  
  通配字符如果一定要用,可用ASCII码代替。Top

11 楼ThreadSharp(ThreadSharp V2006)回复于 2006-02-15 15:03:08 得分 30

你用的是什么版本的,  
  我在9I中试过了  
  insert   into   table   (email)   values   ('aa_bb@cc.com');  
  可以通过    
  除了在WHERE后面的'_'代表通配符,其它地方可以当正常的字符使用Top

12 楼Heister(▄︻┻┳═一)回复于 2006-02-15 15:18:53 得分 0

原来   是数据库   加了个触发器,晕死,多谢大家了Top

相关问题

  • 有点难度
  • 有点难度
  • 有点难度
  • 有点难度哦!
  • 有点难度的...
  • 可能有点难度!!
  • 有点难度的问题
  • 有点难度的问题!
  • 有点难度的问题,
  • 触发器,有点难度

关键词

  • 字符
  • oracle
  • sql
  • aa
  • bb
  • cc
  • 通配符
  • 约束
  • 插入
  • email

得分解答快速导航

  • 帖主:Heister
  • bzszp
  • sbaz
  • bzszp
  • shicj
  • lovelycat0512
  • ThreadSharp

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo