如何用SQl语句只读取日期的年份和月份

嘿,兄弟,说起这日期处理,我真是踩过不少坑。
记得有一次,我在一个项目里,得从Oracle数据库里提取出某个日期字段的年份和月份。
当时我就用了substr函数,记得是 substr(TollDate,1 ,7 ),这玩意儿确实挺管用。
不过,那时候我疏忽了,没意识到TollDate字段其实是个日期类型,直接用substr截取可能会出问题。
于是,我赶紧用to_char(TollDate,'YYYYMM')来转换成字符串,这样才顺利地得到了想要的年份和月份。

那时候,我就在想,这玩意儿在其他数据库里应该也差不多吧。
后来在SQL Server上搞,我就用LEFT(convert(varchar,TollDate,1 2 0),7 ),感觉也还行。
不过,这事儿你得小心,因为不同数据库的日期格式确实可能不一样,比如有的数据库日期格式是DD/MM/YYYY,有的则是YYYY-MM-DD,搞错格式就悲剧了。

这块儿,我踩过不少坑,但总的来说,通过这些SQL函数,提取年份和月份还是挺方便的。
这在做数据分析或者生成报告的时候特别有用。
哎,说起来,我还得提醒你,搞这些的时候,一定要先了解清楚你用的数据库类型和它的日期格式,别像我以前那样,稀里糊涂地就上了。

sql提取系统时间只取年月日时别的都不需要

说白了,在SQL里提取时间戳的年月日部分,最直接的就是用字符串函数按字符数截取。
去年我们跑的那个项目里,碰到过3 000量级的数据,用LEFT('2 006 1 2 04 1 4 5 1 02 ',1 0)这种写法特别快,秒级出结果,因为直接按字节算,不涉及转换。
另外一点,如果时间戳带分隔符像'2 006 -1 2 -04 1 4 :5 1 :02 ',那用SUBSTRING('2 006 -1 2 -04 1 4 :5 1 :02 ',1 ,1 0)也行,但有个细节挺关键的:记得把分隔符也当字符数算进去。
说实话挺坑的,我一开始也以为格式统一就不会出问题,后来发现不对,有的系统默认带时区偏移,截取前1 0个字符可能就漏掉了时区信息。
等等,还有个事,如果数据库是MySQL,用DATE_FORMAT(timestamp, '%Y%m%d')更规范,但Oracle和SQL Server得用不同的函数。
建议先确认下系统时间戳的精确格式,再选工具。