SQL中哪个字段类别记录日期和哪个字段类别记录时间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中哪个字段类别记录日期和哪个字段类别记录时间相关的知识,希望对你有一定的参考价值。
我要设计两个字段,一个字段保存日期,就是年月日
另一个字段记录时间,即时分秒
分别选择什么类别
我在企业管理器里面看到只有datetime和timestamp两个和时间有关的
设计为字符串类型就行.
sql语句在其他语言中只是嵌入使用,里面的类型与编程语言无关. 参考技术A SqlServer的时间格式为:2009-09-08 07:30:03.000,顾名思义就是日期和时间混合在一起的格式,如果用此字段类型只保存日期或时间是不可能的,建议你用varchar类型的两个字段来解决你的问题,日期放到一个varchar字段中,时间放到一个varchar字段中本回答被提问者采纳 参考技术B SQL SERVER里没有单独的日期类型和时间类型,只有datetime类型,可以用来保存日期时间类型的数据。
就是说,这个字段可以同时保存日期和时间。如果你的程序要求日期和时间要分成2个字段保存,那么可以把2个字段都设置为datetime类型,当然用char类型也是可以的。 参考技术C 日期用date
时间用time 参考技术D 你选择时间格式!去看看,肯定有的
获取特定子记录的 SQL 查询
【中文标题】获取特定子记录的 SQL 查询【英文标题】:SQL Query to get specific child records 【发布时间】:2016-06-01 14:16:57 【问题描述】:我需要根据父表搜索条件获取子表记录,但它们需要不同,输出应如下所示:
表 A,有三行。第一行用于通用规则,第二行用于特定类别,第三行用于特定分支、类别和子类别。 现在,我的输出应该包含特定于通用的规则。 以下是输出规则:
查询的输入将是分支、类别和子类别 表 A 中的每个记录集由 03 行组成 第 1 行有分支,但类别和子类别为空 第 2 行的 Branch 和 Category Sub-Category 为 Null 第 3 行包含分支、类别和子类别。 Table-A 记录集中的每一行在 Table-B 中都有子记录 仅使用分支记录(第 1 行),具有通用记录,这些记录也可以是第 2 行和第 3 行的子记录 使用 Branch 和 Category Sub-Category 作为 Null 的记录(第 2 行)在表 B 中有子记录,它们覆盖第 1 行的子记录 带有分支、类别和子类别的记录(第 3 行)在表 B 中有子记录,它们覆盖第 1 行和第 2 行的子记录。 第 1,2 和 3 行的所有子记录都将成为输出的一部分,但如果第 3 行中存在子记录,则尽管它存在于其他行中,但输出将包含第 3 行的子记录 如果第 1 行和第 2 行中存在子记录但第 3 行中没有子记录,则输出 将有第 2 行的子记录 如果第 1 行中存在子记录但第 2 行和第 3 行中没有子记录,则 将成为输出的一部分。现在,
在示例输出中,“Pay”出现在第 1,2 和 3 行,但在 输出我们正在考虑第 3 行的子记录,因为它覆盖了记录 1 和 2 “折扣”存在于记录 1 和 3 中,但输出包括第 3 行的子项 “项目”不是第 1 行和第 2 行子项的一部分,但由于它存在于第 3 行中,因此它将成为输出的一部分 'Paris' 只是第 2 行的一部分,但因为它没有被第 2 行覆盖,所以 它是输出的一部分我尝试了以下查询,但没有给出所需的输出:
SELECT DISTINCT RULE,
value
FROM siebel.b rxm
WHERE par_row_id IN (SELECT row_id
FROM siebel.a
WHERE ( branch = 'Civil'
AND category = 'C.M.> (Civil)'
AND sub_category IS NULL )
OR ( branch = 'Civil'
AND category = 'C.M. (Civil)'
AND sub_category = 'Pauper' )
OR ( branch = 'Civil'
AND category IS NULL
AND sub_category IS NULL ))
我使用 Oracle 作为 RDBMS。
架构语句:
Create Table A (ROW_ID int, BRANCH varchar(50), CATEGORY varchar(50), SUB_CATEGORY varchar(50))
Create Table B (PAR_ROW_ID int, RULE varchar(50), Value varchar(50))
INSERT INTO A (ROW_ID, BRANCH)
VALUES (1,'Civil')
INSERT INTO A (ROW_ID, BRANCH, CATEGORY)
VALUES (2,'Civil','C.M. (Civil)')
INSERT INTO A (ROW_ID, BRANCH, CATEGORY, SUB_CATEGORY)
VALUES (3,'Civil','C.M. (Civil)','Pauper')
INSERT INTO B (PAR_ROW_ID, RULE, VALUE)
VALUES (1,'Pay','10')
INSERT INTO B (PAR_ROW_ID, RULE, VALUE)
VALUES (1','Days','25')
INSERT INTO B (PAR_ROW_ID, RULE, VALUE)
VALUES (1,'Discount','20')
INSERT INTO B (PAR_ROW_ID, RULE, VALUE)
VALUES (2,'Pairs','5')
INSERT INTO B (PAR_ROW_ID, RULE, VALUE)
VALUES (2,'Pay','30')
INSERT INTO B (PAR_ROW_ID, RULE, VALUE)
VALUES (3,'Pay','15')
INSERT INTO B (PAR_ROW_ID, RULE, VALUE)
VALUES (3,'Discount','20')
INSERT INTO B (PAR_ROW_ID, RULE, VALUE)
VALUES (3,'items','30')
【问题讨论】:
(1) 问题不清楚。您必须逐行解释预期的输出,在此基础上任何行都是您的输出的一部分。 (2) 尝试共享 create/insert 语句,以便我们可以尝试复制。我们无法键入每一列和每一行来测试场景。 @Utsav,对不起,我无法让我的问题更清楚。我现在更新了它并提到了更详细的描述。希望现在清楚了。 【参考方案1】:SELECT MAX( par_row_id ) AS par_row_id,
rule,
MAX( value ) KEEP ( DENSE_RANK LAST OVER ORDER BY par_row_id ) AS value
FROM table_b
GROUP BY rule
或者:
SELECT par_row_id,
rule,
value
FROM (
SELECT b.*,
ROW_NUMBER() OVER ( PARTITION BY rule ORDER BY par_row_id DESC ) AS rn
FROM table_b b
)
WHERE rn = 1;
【讨论】:
以上是关于SQL中哪个字段类别记录日期和哪个字段类别记录时间的主要内容,如果未能解决你的问题,请参考以下文章
获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)