从ID中提取日期并获取最近一年的数据

时间:2016-08-31 14:38:04

标签: sql oracle date extract records

我在下面的查询中,我可以使用id列中的<StackPanel Orientation="Vertical" > <!-- Control content --> <local:ChartBar SecondaryContent="Secondary Content One"> <StackPanel Orientation="Vertical"> <Label>Chart Bar</Label> <Ellipse Height="30" Width="60" Fill="GreenYellow" Opacity="0.2" /> <Label>Other stuff, etc. etc.</Label> </StackPanel> </local:ChartBar> <!-- Templated viewmodel content --> <local:ChartBar Content="{Binding RandomViewModelProperty}" IsExpanded="True"> <local:ChartBar.ContentTemplate> <DataTemplate> <Label Background="Beige" Content="{Binding}" Margin="20" /> </DataTemplate> </local:ChartBar.ContentTemplate> <local:ChartBar.SecondaryContent> <ComboBox> <TextBlock Text="One" /> <TextBlock Text="Two" /> <TextBlock Text="Three" /> </ComboBox> </local:ChartBar.SecondaryContent> </local:ChartBar> </StackPanel> 提取日期。但现在我想获取最后一年的数据,从id列中比较这个日期。

to_date(substr(id, 1, 14), 'YYYYMMDDHH24MISS')

1 个答案:

答案 0 :(得分:1)

如果您想在一年前获得与今天相同或更晚的数据,那么:

where  id >= to_number(to_char(add_months(sysdate,-12), 'YYYYMMDD'))*10000000000

这假定您在问题中给出了正确的位数。否则,您可能需要追加/删除最终数字中的一些零。

今天,右边的表达式会产生这个数字:

201508310000000000

解释

sysdate是将当前时间戳记作为datetime的Oracle方法。

add_months(...,-1)从那天起减去1年,所以如果我们今天(2016年8月31日)这样做,我们会201510831

to_char(..., 'YYYYMMDD')将日期时间转换为字符串,格式为YYYYMMDD。这样就会产生字符串20150831

to_number(...)将该字符串转换为数字数据类型,即转换为20150831

*10000000000将该数字相乘,以使其与id范围相似的范围相同,从而得出最终结果201508310000000000