declDate: string;declDate := FormatDateTime('yyyy-mm-dd',DateTimePicker1.Date);表 T_DECL_BASEdeclno DECL_DATE
1          2005-10-28 14:22:20
2          2005-10-28
3          2005-01-01 14:22:20
4          2005-1-1 14:22:20 
5          2005-1-1
6          2005-1-1 下午 14:22:20
7          2005-10-28 上午 14:22:20
1、我这里有 表T_DECL_BASE , 其中字段 DECL_DATE 值类型为 VARCHAR(23) 
2、我需要通过 传进去时间的值 declDate 来查询 整个表 
   如 select * from T_DECL_BASE a
      where to_char(to_date(a.DECL_DATE,'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd') ='+ declDate +'
3、由于 表里 时间 数据格式不统一 ,只能查询 部分数据出来,大家看下能有什么语句进行查询吗?   (象 我之上的语句 就无法查询出 带中文字的 的时间来,大家看如何写这个语句可以查询)                

解决方案 »

  1.   

    好像没有好的方法了,先写程序把旧数据都migration成统一的格式,然后修改应用统一insert的格式
      

  2.   

    try:select * from T_DECL_BASE a
          where to_char(to_date(substr(a.DECL_DATE,10),'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd') ='+ declDate +' 
      

  3.   

    修改sql语句:
    try:select * from T_DECL_BASE a
          where to_char(to_date(substr(a.DECL_DATE,10),'yyyy-MM-dd'),'yyyy-MM-dd') ='+ declDate +' 
      

  4.   

    WITH T_DECL_BASE AS
    (
    SELECT 1 AS declno ,'2005-10-28 14:22:20' AS DECL_DATE FROM DUAL UNION
    SELECT 2,          '2005-10-28'                FROM DUAL UNION
    SELECT 3,          '2005-01-01 14:22:20'       FROM DUAL UNION
    SELECT 4,          '2005-1-1 14:22:20'         FROM DUAL UNION
    SELECT 5,          '2005-1-1'                  FROM DUAL UNION
    SELECT 6,          '2005-1-1 下午 14:22:20'    FROM DUAL UNION
    SELECT 7,          '2005-10-28 上午 14:22:20' FROM DUAL
    )SELECT T.*,
           TO_CHAR(TO_DATE(CASE
                             WHEN LENGTH(T.DECL_DATE) <= 10 THEN
                              T.DECL_DATE
                             ELSE
                              SUBSTR(T.DECL_DATE, 1,
                                     INSTR(T.DECL_DATE, ' ') - 1
     )
                           END,
                           'YYYY-MM-DD'),
                   'YYYY-MM-DD') AS DECL_DATE_1
      FROM T_DECL_BASE T
      

  5.   

    select * from T_DECL_BASE a 
          WHERE TO_CHAR(TO_DATE(CASE
                             WHEN LENGTH(T.DECL_DATE) <= 10 THEN
                              T.DECL_DATE
                             ELSE
                              SUBSTR(T.DECL_DATE, 1,
                                     INSTR(T.DECL_DATE, ' ') - 1
                                     )
                           END,
                           'YYYY-MM-DD'),
                   'YYYY-MM-DD') ='+ declDate +' 
      

  6.   


    2005-1-1的情况下, substr(T.DECL_DATE,10),'yyyy-MM-dd')会出错的
      

  7.   

    select * from T_DECL_BASE a 
          WHERE TO_CHAR(TO_DATE(CASE
                             WHEN LENGTH(a.DECL_DATE) <= 10 THEN
                              a.DECL_DATE
                             ELSE
                              SUBSTR(a.DECL_DATE, 1,
                                     INSTR(a.DECL_DATE, ' ') - 1
                                     )
                           END,
                           'YYYY-MM-DD'),
                   'YYYY-MM-DD') ='+ declDate +' 
      

  8.   

    select * from T_DECL_BASE a 
          where to_char(to_date(a.DECL_DATE,'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd') ='+ declDate +' 我使用这个语句 在PL/SQL 查询时 报 '在要求输入字符处找到非数字字符'怎么解决呀??
      

  9.   

    ='+ declDate +'  改成 具体的日期,如='2009-05-01'='+ declDate +'  是delphi中的用法,在plsql中 ='+ declDate +'  改成 具体的日期,如='2009-05-01'
      

  10.   

    不是呀.我在PL/SQL 中写的 是具体时间;
    但因为 查询出的数据中 有中文的 报 '在要求输入字符处找到非数字字符' .请问能不能通过语句来解决这个错误?
      

  11.   

    declDate 现在有这几种格式 非常乱 
              2005-10-28 14:22:20 
              2005-10-28 
              2005-01-01 14:22:20          
              2005-1-1 14:22:20 
              2005-1-1 
              2005-1-1 下午 14:22:20 
              2005-10-28 上午 14:22:20 Delphi(Pascal) code
    sql: TStrings;
    declDate :string;sql.Append('insert into T_DECL_BASE (DECL_NO,DECL_DATE)');
    sql.Append(' values (:P1,:P2)');  if not adoConn.Connected then adoConn.Open();
      adoConn.BeginTrans();
      adoQuery.SQL.Clear();
      adoQuery.SQL.AddStrings(sql);
      adoQuery.Parameters.ParamByName('P1').Value:= declNo;
      adoQuery.Parameters.ParamByName('P2').Value:= declDate;
    请问 我需要 : 
    1、因为declDate的字段非常乱 把declDate 按 'yyyy-MM-dd hh24:mi:ss' 的规定格式 插入数据库 请问 如何写 adoQuery.Parameters.ParamByName('P2').Value:= declDate 这条语句?