共 19篇 前 4 页:    每页5篇 下一页  

数据库DB

主要验证SQL数据库中已输入的15位 及18位 身份证号码的位数、出生年月日是否正确,
可以过滤出大部分的输入错误。

or (len(身份证号)=18 and (Substring(身份证号,7,2)<'19' or Substring(身份证号,7,2)>'20'
        or (Substring(身份证号,11,2)>12)
or (Substring(身份证号,11,2) in (01,03,05,07,08,10,12) and Substring(身份证号,13,2)>31)
or (Substring(身份证号,11,2) in (04,06,09,11) and Substring(身份证号,13,2)>30)
or (Substring(身份证号,11,2)=02 and Substring(身份证号,13,2)>29)))

注:转载请注明出处


---------------------- 下面是针对 15位 及18位 身份证号码性别的验证语句 ------------------

-- Access 不支持 Substring 查询,可以替换为 mid 查询。

select 序号,姓名,身份证号,性别
from 身份表
where (((len(身份证号)=15) and (Substring(身份证号,15,1) in (1,3,5,7,9)) and 性别<>'男')
or ((len(身份证号)=15) and (Substring(身份证号,15,1) in (2,4,6,8,0)) and 性别<>'女'))

or (((len(身份证号)=18) and (Substring(身份证号,17,1) in (1,3,5,7,9)) and 性别<>'男')
or ((len(身份证号)=18) and (Substring(身份证号,17,1) in (2,4,6,8,0)) and 性别<>'女'))

---------------------- 下面是针对 15位 及18位 身份证号码位数与出生年月日的验证 ------------------

-- Access 不支持 Substring 查询,可以替换为 mid 查询。

select 序号,姓名,身份证号,性别
from 身份表
where (len(身份证号)<>15 and len(身份证号)<>18)
or (len(身份证号)=15 and ((Substring(身份证号,9,2)>12)
or (Substring(身份证号,11,2) > 31)
or (Substring(身份证号,9,2) in (01,03,05,07,08,10,12) and Substring(身份证号,11,2)>31)
or (Substring(身份证号,9,2) in (04,06,09,11) and Substring(身份证号,11,2)>30)
or (Substring(身份证号,9,2)=02 and Substring(身份证号,11,2)>29)))

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lovelacy/archive/2007/09/19/1791722.aspx

weiking   2009-07-15 11:42:40 阅读:641  评论:1  引用:0
〖摘要:〗
mysql 大对象存取:
类型一般应该用mediumblod,
blob只能存2的16次方个byte,
mediumblod是24次方,
一般来说够用了.longblob是32次方有些大.

MYSQL默认配置只能存1M大小的文件,要修改配置,WIN版本的在mysql.ini文件中
修改max_allowed_packet,net_buffer_length等几个参数,或直接SET GLOBAL varName=value.
linux版本可以在启动参数后加-max_allowed_packet=xxM等几个参数.

MYSQL存大对象最好直接就setBinaryStream,又快又方便.
而不要先插入空再造型成BLOB然后再setBlob

例子:
import java.sql.*;
import java.io.*;
public class DBTest {

  
   static String driver = "org.gjt.mm.mysql.Driver";
   static String url = "jdbc:mysql://localhost:3306/test";
   static String user = "root";
   static String passwd = "passwd";
   public static void main(String[] args) throws Exception {
Connection conn = null;
try {
   Class.forName(driver);
   conn = DriverManager.getConnection(url,user,passwd);
  
   int op = 1;
   //插入
   if (op == 0) {
       PreparedStatement ps = conn.prepareStatement("insert into tb_file values (?,?)");
       ps.setString(1, "aaa.exe");
       InputStream in = new FileInputStream("d:/aaa.exe");
       ps.setBinaryStream(2,in,in.available());
       ps.executeUpdate();
       ps.close();
   }
   else {
       //取出
       PreparedStatement ps = conn.prepareStatement("select * from   tb_file where filename = ?");
       ps.setString(1, "aaa.exe");
       ResultSet rs = ps.executeQuery();
       rs.next();
       InputStream in = rs.getBinaryStream("filecontent");
       System.out.println(in.available());
       FileOutputStream out = new FileOutputStream("d:/bbb.exe");
       byte[] b = new byte[1024];
       int len = 0;
       while ( (len = in.read(b)) != -1) {
      out.write(b, 0, len);
      out.flush();
       }
       out.close();
       in.close();
       rs.close();
       ps.close();
   }
}
catch (Exception ex) {
   ex.printStackTrace(System.out);
}
finally {
   try {conn.close();}
   catch (Exception ex) { }
}
   }
}



sqlserver 大对象存取没有什么多说的,只要是image类型就行了,注意这是column类型,有人以为它只能存
图象.image是文件镜象的意思.
import java.sql.*;
import java.io.*;
public class DBTest {


   static String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
   static String url = "jdbc:microsoft:sqlserver://192.168.0.202:9999999999;DatabaseName=dddd";
   static String user = "sa";
   static String passwd = "ps";
   public static void main(String[] args) throws Exception {
Connection conn = null;
try {
   Class.forName(driver);
   conn = DriverManager.getConnection(url,user,passwd);
   int op = 0;
   //插入
   if (op == 0) {
       PreparedStatement ps = conn.prepareStatement("insert into tb_file values (?,?)");
       ps.setString(1, "aaa.exe");
       InputStream in = new FileInputStream("d:/aaa.exe");
       ps.setBinaryStream(2,in,in.available());
       ps.executeUpdate();
       ps.close();
   }
   else {
       //取出
       PreparedStatement ps = conn.prepareStatement("select * from   tb_file where filename = ?");
       ps.setString(1, "aaa.exe");
       ResultSet rs = ps.executeQuery();
&
继续阅读其余的  4559 字
weiking   2008-12-09 12:57:05 阅读:281  评论:0  引用:0

 

STORE_IN_FLAT_FILE CONSTANT INTEGER := 1;
STORE_IN_REDO_LOGS CONSTANT INTEGER := 2;

PROCEDURE  build
  (dictionary_filename IN VARCHAR2 DEFAULT '',
   dictionary_location IN VARCHAR2 DEFAULT '',
                 options IN NUMBER DEFAULT 0);
--
--
PROCEDURE set_tablespace( new_tablespace IN VARCHAR2 DEFAULT '',
                          dictionary_tablespace IN VARCHAR2 DEFAULT '',
                          spill_tablespace IN VARCHAR2 DEFAULT '');
--
END dbms_logmnr_d;

 

编译的时候出现错误

行号= 136 列号= 1 错误文本= PLS-00305: 'BUILD' 的前一次使用 (在第 136 行) 与此次使用发生冲突
行号= 136 列号= 1 错误文本= PL/SQL: Item ignored
行号= 136 列号= 12 错误文本= PLS-00323: 子程序或游标 'BUILD' 已在程序包说明中说明,必须在程序包体中对其进行定义。
行号= 136 列号= 12 错误文本= PLS-00328: 必须为事先说明的 BUILD 定义一个子程序主体
行号= 142 列号= 1 错误文本= PLS-00305: 'SET_TABLESPACE' 的前一次使用 (在第 142 行) 与此次使用发生冲突
行号= 142 列号= 1 错误文本= PL/SQL: Item ignored
行号= 142 列号= 11 错误文本= PLS-00323: 子程序或游标 'SET_TABLESPACE' 已在程序包说明中说明,必须在程序包体中对其进行定义。
行号= 142 列号= 11 错误文本= PLS-00328: 必须为事先说明的 SET_TABLESPACE 定义一个子程序主体

weiking   2008-05-16 09:55:31 阅读:652  评论:1  引用:0

回家心急,走的时候匆忙也没和大家打声招呼,
回来后琐事也多,还是没能及时给大家拜年。

在此,weiking恭祝大家春节吉祥,鼠年喜事多。

weiking   2008-02-08 13:23:24 阅读:57  评论:1  引用:0
这一年过的真是懒,不知道昨天做了什么,也不知道明天要做什么,几个朋友的电话和公司的圣诞气氛告诉自己2007的圣诞节来了。其实从前几天开始断断续续的就收到一些手机祝福短信,心里很是感激,感激有人惦记着,只是考虑到还未到25号 也就懒的去回祝福了。24号是平安夜,尽管这个节日是西方来的,但我还是喜欢它的,因为它带给我很多的快乐和回忆,从中学时代,到大学,直到现在。回想起卓达的点点滴滴,似乎有说不完的感慨,曾经的那些事那些人,同学还有老师。今天,本应该给他们去电话问候,或者起码也应该发条信息,可weiking太懒了,就在此向卓达的三位尊敬的老师一同发去圣诞祝福,一起问候了,祝老师们一切都好。同时也祝福青草地所有的朋友节日快乐。
weiking   2007-12-24 19:25:39 阅读:60  评论:2  引用:0
原文:http://www.blogjava.net/wml/
         本文依照HIBERNATE帮助文档,一些网络书籍及项目经验整理而成,只提供要点和思路,具体做法可以留言探讨,或是找一些更详细更有针对性的资料。

  初用HIBERNATE的人也许都遇到过性能问题,实现同一功能,用HIBERNATE与用JDBC性能相差十几倍很正常,如果不及早调整,很可能影响整个项目的进度。

  大体上,对于HIBERNATE性能调优的主要考虑点如下:

  Ø 数据库设计调整

  Ø HQL优化

  Ø API的正确使用(如根据不同的业务类型选用不同的集合及查询API)

  Ø 主配置参数(日志,查询缓存,fetch_size, batch_size等)

  Ø 映射文件优化(ID生成策略,二级缓存,延迟加载,关联优化)

  Ø 一级缓存的管理

  Ø 针对二级缓存,还有许多特有的策略

  Ø 事务控制策略。

  1、 数据库设计

  a) 降低关联的复杂性

  b) 尽量不使用联合主键

  c) ID的生成机制,不同的数据库所提供的机制并不完全一样

  d) 适当的冗余数据,不过分追求高范式

  2、 HQL优化

  HQL如果抛开它同HIBERNATE本身一些缓存机制的关联,HQL的优化技巧同普通的SQL优化技巧一样,可以很容易在网上找到一些经验之谈。

  3、 主配置

  a) 查询缓存,同下面讲的缓存不太一样,它是针对HQL语句的缓存,即完全一样的语句再次执行时可以利用缓存数据。但是,查询缓存在一个交易系统(数据变更频繁,查询条件相同的机率并不大)中可能会起反作用:它会白白耗费大量的系统资源但却难以派上用场。

  b) fetch_size,同JDBC的相关参数作用类似,参数并不是越大越好,而应根据业务特征去设置

  c) batch_size同上。

  d) 生产系统中,切记要关掉SQL语句打印。

  4、 缓存

  a) 数据库级缓存:这级缓存是最高效和安全的,但不同的数据库可管理的层次并不一样,比如,在ORACLE中,可以在建表时指定将整个表置于缓存当中。

  b) SESSION缓存:在一个HIBERNATE SESSION有效,这级缓存的可干预性不强,大多于HIBERNATE自动管理,但它提供清除缓存的方法,这在大批量增加/更新操作是有效的。比如,同时增加十万条记录,按常规方式进行,很可能会发现OutofMemeroy的异常,这时可能需要手动清除这一级缓存:Session.evict以及Session.clear

  c) 应用缓存:在一个SESSIONFACTORY中有效,因此也是优化的重中之重,因此,各类策略也考虑的较多,在将数据放入这一级缓存之前,需要考虑一些前提条件:

  i. 数据不会被第三方修改(比如,是否有另一个应用也在修改这些数据?)

  ii. 数据不会太大

  iii. 数据不会频繁更新(否则使用CACHE可能适得其反)

  iv. 数据会被频繁查询

  v. 数据不是关键数据(如涉及钱,安全等方面的问题)。

  缓存有几种形式,可以在映射文件中配置:read-only(只读,适用于很少变更的静态数据/历史数据),nonstrict-read-write,read-write(比较普遍的形式,效率一般),transactional(JTA中,且支持的缓存产品较少)

  d) 分布式缓存:同c)的配置一样,只是缓存产品的选用不同,在目前的HIBERNATE中可供选择的不多,oscache, jboss cache,目前的大多数项目,对它们的用于集群的使用(特别是关键交易系统)都持保守态度。在集群环境中,只利用数据库级的缓存是最安全的。

  5、 延迟加载

  a) 实体延迟加载:通过使用动态代理实现

  b) 集合延迟加载:通过实现自有的SET/LIST,HIBERNATE提供了这方面的支持

  c) 属性延迟加载:

  6、 方法选用

  a) 完成同样一件事,HIBERNATE提供了可供选择的一些方式,但具体使用什么方式,可能用性能/代码都会有影响。显示,一次返回十万条记录(List/Set/Bag/Map等)进行处理,很可能导致内存不够的问题,而如果用基于游标(ScrollableResults)或Iterator的结果集,则不存在这样的问题。

  b) Session的load/get方法,前者会使用二级缓存,而后者则不使用。

  c) Query和list/iterator,如果去仔细研究一下它们,你可能会发现很多有意思的情况,二者主要区别(如果使用了Spring,在HibernateTemplate中对应find,iterator方法):

  i. list只能利用查询缓存(但在交易系统中查询缓存作用不大),无法利用二级缓存中的单个实体,但list查出的对象会写入二级缓存,但它一般只生成较少的执行SQL语句,很多情况就是一条(无关联)。

  ii. iterator则可以利用二级缓存,对于一条查询语句,它会先从数据库中找出所有符合条件的记录的ID,再通过ID去缓存找,对于缓存中没有的记录,再构造语句从数据库中查出,因此很容易知道,如果缓存中没有任何符合条件的记录,使用iterator会产生N+1条SQL语句(N为符合条件的记录数)

  iii. 通过iterator,配合缓存管理API,在海量数据查询中可以很好的解决内存问题,如:

  while(it.hasNext()){

  YouObject object = (YouObject)it.next();

  session.evict(youObject);

  sessionFactory.evice(YouObject.class, youObject.getId());

  }

  如果用list方法,很可能就出OutofMemory错误了。

  iv. 通过上面的说明,我想你应该知道如何去使用这两个方法了。

  7、 集合的选用

  在HIBERNATE 3.1文档的“19.5. Understanding Collection performance”中有详细的说明。

  8、 事务控制

  事务方面对性能有影响的主要包括:事务方式的选用,事务隔离级别以及锁的选用

  a) 事务方式选用:如果不涉及多个事务管理器事务的话,不需要使用JTA,只有JDBC的事务控制就可以。

  b) 事务隔离级别:参见标准的SQL事务隔离级别

  c) 锁的选用:悲观锁(一般由具体的事务管理器实现),对于长事务效率低,但安全。乐观锁(一般在应用级别实现),如在HIBERNATE中可以定义VERSION字段,显然,如果有多个应用操作数据,且这些应用不是用同一种乐观锁机制,则乐观锁会失效。因此,针对不同的数据应有不同的策略,同前面许多情况一样,很多时候我们是在效率与安全/准确性上找一个平衡点,无论如何,优化都不是一个纯技术的问题,你应该对你的应用和业务特征有足够的了解。

  9、 批量操作

  即使是使用JDBC,在进行大批数据更新时,BATCH与不使用BATCH有效率上也有很大的差别。我们可以通过设置batch_size来让其支持批量操作。

  举个例子,要批量删除某表中的对象,如“delete Account”,打出来的语句,会发现HIBERNATE找出了所有ACCOUNT的ID,再进行删除,这主要是为了维护二级缓存,这样效率肯定高不了,在后续的版本中增加了bulk delete/update,但这也无法解决缓存的维护问题。也就是说,由于有了二级缓存的维护问题,HIBERNATE的批量操作效率并不尽如人意!

  从前面许多要点可以看出,很多时候我们是在效率与安全/准确性上找一个平衡点,无论如何,优化都不是一个纯技术的问题,你应该对你的应用和业务特征有足够的了解,一般的,优化方案应在架构设计期就基本确定,否则可能导致没必要的返工,致使项目延期,而作为架构师和项目经理,还要面对开发人员可能的抱怨,必竟,我们对用户需求更改的控制力不大,但技术/架构风险是应该在初期意识到并制定好相关的对策。

  还有一点要注意,应用层的缓存只是锦上添花,永远不要把它当救命稻草,应用的根基(数据库设计,算法,高效的操作语句,恰当API的选择等)才是最重要的。

weiking   2007-06-06 13:54:24 阅读:532  评论:0  引用:0
〖摘要:〗

选自<<精通Hibernate:Java对象持久化技术详解>> 作者:孙卫琴 来源:www.javathinker.org

批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段:

tx = session.beginTransaction();
Iterator customers=session.find("from Customer c where c.age>0").iterator();
while(customers.hasNext()){
Customer customer=(Customer)customers.next();
customer.setAge(customer.getAge()+1);
}

tx.commit();
session.close();

如果CUSTOMERS表中有1万条年龄大于零的记录,那么Session的find()方法会一下子加载1万个Customer对象到内存。当执行tx.commit()方法时,会清理缓存,Hibernate执行1万条更新CUSTOMERS表的update语句:

update CUSTOMERS set AGE=? …. where ID=i;
update CUSTOMERS set AGE=? …. where ID=j;
……
update CUSTOMERS set AGE=? …. where ID=k;

以上批量更新方式有两个缺点:
(1) 占用大量内存,必须把1万个Customer对象先加载到内存,然后一一更新它们。
(2) 执行的update语句的数目太多,每个update语句只能更新一个Customer对象,必须通过1万条update语句才能更新一万个Customer对象,频繁的访问数据库,会大大降低应用的性能。

为了迅速释放1万个Customer对象占用的内存,可以在更新每个Customer对象后,就调用Session的evict()方法立即释放它的内存:

tx = session.beginTransaction();
Iterator customers=session.find("from Customer c where c.age>0").iterator();
while(customers.hasNext()){
Customer customer=(Customer)customers.next();
customer.setAge(customer.getAge()+1);
session.flush();
session.evict(customer);
}

tx.commit();
session.close();

在以上程序中,修改了一个Customer对象的age属性后,就立即调用Session的flush()方法和evict()方法,flush()方法使Hibernate立刻根据这个Customer对象的状态变化同步更新数据库,从而立即执行相关的update语句;evict()方法用于把这个Customer对象从缓存中清除出去,从而及时释放它占用的内存。

但evict()方法只能稍微提高批量操作的性能,因为不管有没有使用evict()方法,Hibernate都必须执行1万条update语句,才能更新1万个Customer对象,这是影响批量操作性能的重要因素。假如Hibernate能直接执行如下SQL语句:

update CUSTOMERS set AGE=AGE+1 where AGE>0;

那么以上一条update语句就能更新CUSTOMERS表中的1万条记录。但是Hibernate并没有直接提供执行这种update语句的接口。应用程序必须绕过Hibernate API,直接通过JDBC API来执行该SQL语句:

tx = session.beginTransaction();

Connection con=session.connection();
PreparedStatement stmt=con.prepareStatement("update CUSTOMERS set AGE=AGE+1 "
+"where AGE>0 ");
stmt.executeUpdate();

tx.commit();

以上程序演示了绕过Hibernate API,直接通过JDBC API访问数据库的过程。应用程序通过Session的connection()方法获得该Session使用的数据库连接,然后通过它创建PreparedStatement对象并执行SQL语句。值得注意的是,应用程序仍然通过Hibernate的Transaction接口来声明事务边界。

如果底层数据库(如Oracle)支持存储过程,也可以通过存储过程来执行批量更新。存储过程直接在数据库中运行,速度更加快。在Oracle数据库中可以定义一个名为batchUpdateCustomer()的存储过程,代码如下:

create or replace procedure batchUpdateCustomer(p_age in number) as
begin
update CUSTOMERS set AGE=AGE+1 where AGE>p_age;
end;

以上存储过程有一个参数p_age,代表客户的年龄,应用程序可按照以下方式调用存储过程:

tx = session.beginTransaction();
Connection con=session.connection();

String procedure = "{call batchUpdateCustomer(?) }";
CallableStatement cstmt = con.prepareCall(procedure);
cstmt.setInt(1,0); //把年龄参数设为0
cstmt.executeUpdate();
tx.commit();

从上面程序看出,应用程序也必须绕过Hibernate API,直接通过JDBC API来调用存储过程。

Session的各种重载形式的update()方法都一次只能更新一个对象,而delete()方法的有些重载形式允许以HQL语句作为参数,例如:

session.delete("from Customer c where c.age>0");

如果CUSTOMERS表中有1万条年龄大于零的记录,那么以上代码能删除一万条记录。但是Session的delete()方法并没有执行以下delete语句:

delete from CUSTOMERS where AGE>0;

Session的delete()方法先通过以下select语句把1万个Customer对象加载到内存中:

select * from CUSTOMERS where AGE>0;

接下来执行一万条delete语句,逐个删除Customer对象:

delete from CUSTOMERS where ID=i;
delete from CUSTOMERS where ID=j;
……
delete from CUSTOMERS where ID=k;

由此可见,直接通过Hibernate API进行批量更新和批量删除都不值得推荐。而直接通过JDBC API执行相关的SQL语句或调用相关的存储过程,是批量更新和批量删除的最佳方式,这两种方式都有以下优点:

(1) 无需把数据库中的大批量数据先加载到内存中,然后逐个更新或修改它们,因此不会消耗大量内存。
(2) 能在一条SQL语句中更新或删除大批量的数据。
 

Hibernate3.0对批量更新和批量删除提供了支持,能够直接执行批量更新或批量删除语句,无需把被更新或删除的对象先加载到内存中。以下是通过Hibernate3.0执行批量更新的程序代码:

代码
  1. Session session = sessionFactory.openSession();    
  2. Transaction tx = session.beginTransaction();    
  3. String hqlUpdate =  "update Customer set name = :newName where name =<img src=" /images/forum/smiles/icon_surprised.gif "/>ldName" ;    
  4. int  updatedEntities = s.createQuery( hqlUpdate )     继续阅读其余的  1924 字
weiking   2007-06-06 13:51:01 阅读:2100  评论:2  引用:0
1005:创建表失败
1006:创建数据库失败
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1009:不能删除数据库文件导致删除数据库失败
1010:不能删除数据目录导致删除数据库失败
1011:删除数据库文件失败
1012:不能读取系统表中的记录
1020:记录已被其他用户修改
1021:硬盘剩余空间不足,请加大硬盘可用空间
1022:关键字重复,更改记录失败
1023:关闭时发生错误
1024:读文件错误
1025:更改名字时发生错误
1026:写文件错误
1032:记录不存在
1036:数据表是只读的,不能对它进行修改
1037:系统内存不足,请重启数据库或重启服务器
1038:用于排序的内存不足,请增大排序缓冲区
1040:已到达数据库的最大连接数,请加大数据库可用连接数
1041:系统内存不足
1042:无效的主机名
1043:无效连接
1044:当前用户没有访问数据库的权限
1045:不能连接数据库,用户名或密码错误
1048:字段不能为空
1049:数据库不存在
1050:数据表已存在
1051:数据表不存在
1054:字段不存在
1065:无效的SQL语句,SQL语句为空
1081:不能建立Socket连接
1114:数据表已满,不能容纳任何记录
1116:打开的数据表太多
1129:数据库出现异常,请重启数据库
1130:连接数据库失败,没有连接数据库的权限
1133:数据库用户不存在
1141:当前用户无权访问数据库
1142:当前用户无权访问数据表
1143:当前用户无权访问数据表中的字段
1146:数据表不存在
1147:未定义用户对数据表的访问权限
1149:SQL语句语法错误
1158:网络错误,出现读错误,请检查网络连接状况
1159:网络错误,读超时,请检查网络连接状况
1160:网络错误,出现写错误,请检查网络连接状况
1161:网络错误,写超时,请检查网络连接状况
1062:字段值重复,入库失败
1169:字段值重复,更新记录失败
1177:打开数据表失败
1180:提交事务失败
1181:回滚事务失败
1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库
1205:加锁超时
1211:当前用户没有创建用户的权限
1216:外键约束检查失败,更新子表记录失败
1217:外键约束检查失败,删除或修改主表记录失败
1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器
1227:权限不足,您无权进行此操作
1235:MySQL版本过低,不具有本功能

url:http://www.goood.org/
weiking   2006-11-13 19:23:51 阅读:79  评论:0  引用:0
表lottery中有10万条彩票数据,
字段lottery_code表示彩票号码,
status字段表示是否中奖,0未中,1是一等奖,2是二等奖,依次类推,  
现在摇奖的号码是123456(假定彩票号码是6位数),
怎么写sql语句??更新彩票数据。

如数据库中已有数据 A买的彩票数123457
B的111115
C的是888888
本期摇奖号123456
那么 A中了5个数 应把status字段更新为2
B只中了1个 status字段更新为1
C没有任何匹配数 status更新0

(假设只有6个数,6个数一一对应为一等奖,status为1。有5个数一一对应为二等奖,status为2,依次类推。
且有顺序之分,也就是说1、2、3 和2、1、3匹配数为1)

不用在java写代码,只用sql语句怎么实现??
weiking   2006-09-25 19:22:51 阅读:404  评论:2  引用:0
天极网

--------------------------------------------------------------------------------
  % 代表零个或者多个任意字符

  _ 代表一个任意字符

  [] 指定范围内的任意单个字符

  [^] 不在指定范围内的任意单个字符

  带有匹配符的字符串必须使用引号引起来,例如下面的示例:

  LIKE 'BR%'返回以“BR”开始的任意字符串。

  LIKE 'Br%'返回以“Br”开始的任意字符中。

  LIKE '%een'返回以“een”结束的任意字符串。

  LIKE '%en%'返回包含“en”的任意字符串。

  liKE 'en'返回以“en”结束的三个字符的字符串。

  LIKE '[CK]%'返回以“C”或者“K”开始的任意字符串。

  LIKE '[S-V]lng'返回长为四个字符的字符串,结尾是“ing”,开始是从S到V

  LIKE 'M[^c]%'返回以“M”开始且第二个字符不是“c”的任意字符串。  注意:

  使用LIKE运算符通常会导致SQL Server不对给定的表使用与之联系的索引。它告诉SQL server比较所指定的字符串并且找到与所提供的匹配符相匹配的任何内容。由于这种原固,不推荐在大型表上使用这种类型的搜索或者比较,至少应该提醒用户,系统寻找满足搜索标准的数据行时所需的等待时间非常重要。
weiking   2006-09-25 18:35:35 阅读:508  评论:1  引用:0

用,就用的漂亮点。文章嘛,借花献佛喽。