我在项目中使用Enterprise Library 6.0在Oracle数据库中执行查询。
当我执行命令时,没有找到任何记录:
SELECT ACS.COD_IDENT_FMACO,
ACO.NOM_IDENT_ACO,
ACS.COD_CICLO_SIGA,
to_char(ACS.DTH_ALOC_CICLO, 'DD/MM/YYYY HH24:MI:SS'),
ACS.SEQ_PROCE_ALOC,
UM.COD_UNIMET_PCP,
UM.COD_UNIMET_SIP,
PERR.ESP_UNIMET_ETAPA,
PERR.LAR_UNIMET_ETAPA,
PERR.COM_UNIMET_ETAPA,
PERR.PES_LIQUIDO,
ACS.COD_INTER_PEDCL,
ACS.COD_ITEM_PEDCL,
IP.NUM_PEDID_MAINF,
C.COD_IDENT_CLIEN,
C.NOM_ABREV_PESSO,
IP.DAT_MAIOR_PLANE,
PD.COD_GRUPO_PROAC,
PD.COD_QUASU_PROAC,
PER.VLR_TOMIN_ESPES,
PER.ESP_MM_PRODT,
PER.VLR_TOMAX_ESPES,
PER.VLR_TOMIN_LARGU,
PER.LAR_MM_PROAC,
PER.VLR_TOMAX_LARGU,
ACS.PES_ALOC_SIGA,
IP.PES_MINIM_DESEJ,
IP.PES_DESEJ_ITEM,
IP.PES_MAXIM_DESEJ,
PD.PES_MIN_PACOT,
PD.PES_MAX_PACOT
FROM PR_ALOC_CICLO_SIGA ACS,
PR_PRODUTO_ETAPA_ROTINA_REALIZ PERR,
CM_ITEM_PC IP,
CM_CLIENTE C,
PR_ROTINA_FABRC R,
PR_ETAPA_ROTINA ER,
PR_PRODT_ETAPA_ROT PER,
PR_PRODUTO PD,
PR_UNIDADE_METALICA UM,
PR_ACO ACO
WHERE ACS.COD_INTER_PEDCL = IP.COD_INTER_PEDCL
AND ACS.COD_ITEM_PEDCL = IP.COD_ITEM_PEDCL
AND IP.COD_IDENT_CLIEN = C.COD_IDENT_CLIEN
AND ACS.COD_CICLO_SIGA = '60'
AND ER.COD_AREA_PROCE = 'Q'
AND ER.COD_OPERA_FABRC IN('TQ007',
'TQ013')
AND IP.COD_INTER_PEDCL = R.NUM_IDENT_PEDID
AND IP.COD_ITEM_PEDCL = R.NUM_ITEM_PEDID
AND R.NUM_ROTIN_FABRC = ER.NUM_ROTIN_FABRC
AND R.NUM_VERSA_ROTIN = ER.NUM_VERSA_ROTIN
AND R.IDC_SITUA_ROTIN IN ('A',
'P')
AND R.IDC_SITUA_ROTIN = 'A'
AND ER.NUM_ROTIN_FABRC = PER.NUM_ROTIN_FABRC
AND ER.NUM_VERSA_ROTIN = PER.NUM_VERSA_ROTIN
AND ER.NUM_ETAPA_ROTIN = PER.NUM_ETAPA_ROTIN
AND IP.COD_IDENT_CLIEN = PD.COD_IDENT_CLIEN
AND IP.COD_LINHA_PRODT = PD.COD_LINHA_PRODT
AND IP.NUM_SEQ_PRODT = PD.NUM_SEQ_PRODT
AND IP.NUM_SEQ_REVIS = PD.NUM_SEQ_REVIS
AND ACS.COD_UNIMET_PCP = UM.COD_UNIMET_PCP
AND UM.COD_UNIMET_PCP = PERR.COD_UNIMET_PCP
AND PERR.SEQ_ETAPA_ROTINA_REALIZADA = UM.SEQ_ULTIM_ETAPA
AND PD.COD_IDENT_ACO = ACO.COD_IDENT_ACO
AND ACS.DTH_ALOC_CICLO LIKE TO_DATE('15/10/2015','DD/MM/YYYY')
AND 'I' LIKE '%'||IP.COD_LINHA_PRODT|| '%'
AND IP.COD_LINHA_PRODT IS NOT NULL
AND 1 = 1
ORDER BY IP.COD_INTER_PEDCL,
IP.COD_ITEM_PEDCL,
IP.NUM_PEDID_MAINF
但如果我改变了行
AND ACS.DTH_ALOC_CICLO LIKE TO_DATE('15/10/2015','DD/MM/YYYY')
通过
AND ACS.DTH_ALOC_CICLO BETWEEN TO_DATE('15/10/2015'||'00:00:00', 'DD/MM/YYYY HH24:MI:SS')
AND TO_DATE('15/10/2015'||'23:59:59', 'DD/MM/YYYY HH24:MI:SS')
结果返回正确。
在C#或企业库中有任何配置可以理解这个命令吗?
注意:我需要执行like,因为我们正在升级系统,此更改会导致记录中的排序顺序不同。
答案 0 :(得分:4)
ACS.DTH_ALOC_CICLO LIKE TO_DATE('15/10/2015','DD/MM/YYYY')
将在两个日期之间进行字符串比较,并使用TO_CHAR( datevalue, format_mask )
会话参数作为格式掩码,使用对NLS_DATE_FORMAT
函数的隐式调用将它们转换为字符串。
如果设置为包含时间组件,则它仅匹配时间组件为00:00:00
的行。
AND ACS.DTH_ALOC_CICLO BETWEEN TO_DATE('15/10/2015'||'00:00:00', 'DD/MM/YYYY HH24:MI:SS')
AND TO_DATE('15/10/2015'||'23:59:59', 'DD/MM/YYYY HH24:MI:SS')
将值作为日期进行比较(并且可以使用列上的索引)。
你也可以这样做:
AND ACS.DTH_ALOC_CICLO >= DATE '2015-10-15'
AND ACS.DTH_ALOC_CICLO < DATE '2015-10-15' + INTERVAL '1' DAY -- or DATE '2015-10-16'
我需要执行like,因为我们正在升级系统,此更改会导致记录中的排序顺序不同。
如果您需要使用LIKE
,则可以执行以下操作:
TO_CHAR( ACS.DTH_ALOC_CICLO, 'DD/MM/YYYY' ) LIKE '15/10/2015'
但是,更改过滤条件不应更改排序顺序。
答案 1 :(得分:0)
删除我的原始答案,因为在12c上测试了它,结果证明这是有效的。
where date_col like to_date('2017/04/01', 'yyyy/mm/dd')
即使我的NLS设置不是'yyyy/mm/dd'
。
你每天都学到新东西。
答案 2 :(得分:0)
这是因为ACS.DTH_ALOC_CICLO字段可能在那里的时间不完全在00:00:00。解决这个问题的简单方法是使用trunc()。
AND TRUNC(ACS.DTH_ALOC_CICLO) = TO_DATE('15/10/2015','DD/MM/YYYY')