入职了,纪念一下

        入职报到一周了,也培训完一周了,后面还有3周的技术培训,岗位基本定下来了。原定的图像处理恐怕要bye了,部门人满了。分到了软件,虽然有点不爽,但是领导安排,木有办法。虽然还是很喜欢图像的东西,不过,恐怕没有那么多的精力分配了,但是还会坚持下去,有时间还会去解读解读OpenCV的源码,注意注意图像、视觉方面的动态。希望自己能够坚持下去。

       以此纪念我即将逝去的image、computer vision!

<think>我们首先分析需求,需要完成三个任务: 1. 查询每个月下旬的员工(下旬一般指21号到月底) 2. 这些员工还需要满足工作10年以上 3. 对这些符合条件的员工,工资增加1000,并计算从3个月前到今天总共多少天 根据引用[1]中提供的思路: 66.求每个月下旬的员工:select * from employees where hire_date between trunc(hire_date,'MM')+19 and last_day(hire_date); 67.进公司工作10年以上的员工,工资增加1000:update employees set salary=salary+1000 where months_between(sysdate,hire_date)>=120; 但是注意,引用[1]中第二个条件使用了months_between函数,并且条件写的是>=120个月(即10年),但这里没有写完整,应该是months_between(sysdate,hire_date)>=120。 然而,我们还需要注意,题目要求的是同时满足两个条件的员工:下旬且工作10年以上。 另外,我们还需要计算3个月前到今天的总天数。 因此,我们可以这样设计: 步骤1:先查询出符合条件的员工(下旬且工作10年以上),然后更新他们的工资。 步骤2:计算3个月前到今天的总天数(这个天数是固定的,与员工无关,所以只需要计算一次)。 但是,题目要求在一个查询中完成?还是分开?实际上,更新和计算天数是两个独立操作。 根据要求,我们需要: - 更新符合条件的员工工资(增加1000) - 同时计算3个月前到今天的天数(这个可以单独计算) 因此,我们可以分为两个部分: 第一部分:更新操作(UPDATE) 第二部分:计算天数(SELECT) 具体如下: 1. 更新语句(UPDATE): 更新条件:每个月下旬(即日期在当月的21日到月末)并且工作10年以上(即日期在10年前)。 2. 计算天数(SELECT): 使用两个日期相减(在Oracle中,两个日期相减得到的是天数差)来计算3个月前到今天的天数。 注意:在Oracle中,我们可以使用ADD_MONTHS函数来获取3个月前的日期,然后用SYSDATE减去这个日期。 但是,这里有一个细节:3个月前的同一天?比如今天是2023-10-15,那么3个月前就是2023-07-15,然后计算从2023-07-15到2023-10-15的天数。但是,如果今天是10月31日,那么3个月前是7月31日,但7月只有31天,所以没问题。但如果今天是2月28日,3个月前的同一天是11月28日?还是说按月份减3?实际上,ADD_MONTHS函数会处理月末的情况。例如,3月31日减去3个月是12月31日(因为11月没有31日,12月有31日),所以ADD_MONTHS(SYSDATE, -3)会返回一个日期,这个日期是当前日期减去3个月,如果当前日期是某个月的月末,而减去3个月后的那个月没有这一天,那么就会返回那个月的最后一天。 因此,计算天数的方法:用SYSDATE减去ADD_MONTHS(SYSDATE, -3)即可。 但是,题目要求的是“3个月前到今天”,比如今天是2017-4-21,那么3个月前是2017-1-21,然后计算从2017-1-21到2017-4-21的天数。注意,这里的天数应该是90天(非闰年)或者91天(闰年且包含2月)?实际上,我们需要计算的是两个日期之间的天数差,包括起始日期吗?通常,我们计算两个日期的间隔天数,如果要求包含起始日期和结束日期,那么就是(结束日期-开始日期)+1。但是题目没有明确,不过一般计算两个日期的间隔,直接用结束日期减去开始日期,得到的是中间间隔的天数(不包含开始日期,包含结束日期?)。在Oracle中,两个日期相减得到的是两个日期之间相差的天数(精确到小数,但这里我们只关心整数部分,且通常我们只取整数部分,因为日期相减得到的是整数天,如果带有时间,则会有小数)。不过,题目中给出的例子是“2017-4-21到2017-7-21”,我们假设是90天(因为4月21到7月21正好3个月,每个月30天?但实际上各个月天数不同)。所以我们需要实际计算。 在Oracle中,我们可以这样计算: SELECT SYSDATE - ADD_MONTHS(SYSDATE, -3) FROM DUAL; 但是,这样计算出来的结果可能带小数,因为SYSDATE包含时间。如果我们只关心整数天,可以截断日期(去掉时间部分)再计算。 不过,题目要求的是“总共多少天”,通常我们认为是整数天,而且题目中的例子也没有时间。所以我们可以使用TRUNC函数去掉时间部分。 因此,计算天数的SQL: SELECT TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3)) AS total_days FROM DUAL; 但是,注意:这样计算出来的天数,如果当前日期是3个月后的同一天,那么结果应该是0?显然不是,我们计算的是从3个月前的那个日期到今天的实际天数,所以应该是正数。例如,从1月21日到4月21日,应该是90天(非闰年:1月21到1月31是10天,2月28天,3月31天,4月21天,共10+28+31+21=90?不对,这样算不对,因为1月21日到4月21日,实际上是1月21日到1月31日(11天?注意:21日到31日有11天?不对,21日到22日是一天,所以21日到31日是10天(31-21=10)),然后2月整月(28天),3月整月(31天),4月1日到4月21日(21天),所以总天数是10+28+31+21=90天。而用4月21日减去1月21日正好是90天(因为4月21日-1月21日=90天)。 所以,用两个日期相减得到的就是实际间隔的天数(注意:在Oracle中,两个日期相减得到的是两个日期之间的天数差,即后面的日期减去前面的日期得到正数,表示间隔的天数,且这个间隔是不包含开始日期的那一天,还是包含?实际上,如果开始日期是d1,结束日期是d2,那么d2-d1得到的是这两个日期之间相差的天数,例如d1=1月21日,d2=4月21日,那么d2-d1=90天。这个90天表示从1月21日到4月21日,中间有90天(注意:1月21日到1月22日是一天,所以1月21日当天不算在内?实际上,在Oracle中,日期相减得到的是两个日期相差的天数,它等于从d1开始经过多少天到达d2。所以1月21日到1月22日相差1天。因此,1月21日到4月21日相差90天。也就是说,从1月21日到4月21日,中间间隔了90天(包括1月21日吗?不包括,因为1月21日0点到1月22日0点是一天,所以1月21日到1月22日是一整天的间隔)。因此,如果我们想要计算从1月21日到4月21日(包括1月21日和4月21日)的总共天数,应该是91天?但是题目中的例子是“2017-4-21到2017-7-21”,我们看题目要求是多少天?题目没有给出具体数字,但我们可以计算:2017-4-21到2017-7-21,4月21日到4月30日:10天(4月21日算一天,到30日共10天?不对,21日到30日是10天(30-21=9,但包括21日当天的话是10天?))。实际上,我们通常计算日期区间,包括开始和结束,那么就是(结束日期-开始日期)+1。但是题目没有明确,不过题目要求的是“总共多少天”,我们可以理解为从开始日期到结束日期之间经过了多少个自然日,包括开始和结束。所以,应该用(结束日期-开始日期)+1。但是,题目中的例子是“到2017-7-21总共多少天”,没有明确说明,所以我们按照题目要求来。题目要求的是“总共多少天”,而例子中并没有给出具体数字,所以我们按照实际需求:如果要求包括开始和结束,则加1;如果只要求间隔天数(即中间经过了多少天),则不加。 然而,在引用[1]中并没有提到这个计算,所以我们可以按照一般理解:两个日期之间的天数差(即结束日期减去开始日期)就是间隔的天数(不包括开始日期,包括结束日期?)。但通常,我们计算总天数是指从开始日期到结束日期的自然日数量,包括开始和结束。所以,我们可以这样计算: total_days = (end_date - start_date) + 1 但是,题目要求的是“3个月前到今天”,那么开始日期是3个月前的那个日期,结束日期是今天。所以,如果我们要求包括开始和结束,那么就是(今天 - 3个月前的日期)+1。但是,题目没有明确,所以我们可以按照实际业务需求。不过,在大多数情况下,我们计算两个日期之间的天数,直接相减得到的是两个日期相差的天数,这个天数就是两个日期之间间隔的天数(不包括开始日期,但包括结束日期?)。例如,1月21日和1月22日相减,结果是1,表示间隔1天。而如果我们说从1月21日到1月22日,一共2天(包括21和22日),那么就是2天。所以,我们需要明确。 但是,题目中要求的是“总共多少天”,而且举的例子是“2017-4-21到2017-7-21”,那么我们可以计算一下:2017-4-21到2017-7-21,实际天数(包括4月21日): 4月:21日到30日:10天(21,22,23,24,25,26,27,28,29,30) 5月:31天 6月:30天 7月:1日到21日:21天 总共:10+31+30+21=92天 但是,如果我们用日期相减:2017-07-21减去2017-04-21,结果是91天(因为4月21日到4月22日是一天,所以到7月21日正好91天)。那么,这91天表示的是从4月21日到7月21日,中间间隔了91天(即4月21日不算,从4月22日开始算,到7月21日结束,一共91天)。而题目要求的是“总共多少天”,如果包括4月21日,那么应该是92天。 所以,我们需要明确业务需求。但题目没有明确,所以我们可以按照两种方式提供,或者按照通常的理解(即包括开始和结束)?但是,在引用[1]中没有相关例子,所以我们可以按照实际天数(包括开始和结束)来计算,即加1。 不过,我们再看题目中的例子:今天是2017-4-21,3个月前是2017-1-21,然后计算从2017-1-21到2017-4-21。按照上面的逻辑,1月21日到4月21日: 1月:21日到31日:11天(包括21日) 2月:28天(2017不是闰年) 3月:31天 4月:1日到21日:21天 总共:11+28+31+21=91天 而用4月21日减去1月21日得到90天,再加1就是91天。 所以,我们采用加1的方式:total_days = (TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3))) + 1 但是,如果当前日期是3个月后的同一天,那么这样计算就是1天?不对,因为3个月前的日期和今天相差90天(比如1月21日到4月21日,实际相差90天,但加上1就是91天,而实际自然日应该是91天(包括1月21日和4月21日))。所以,我们这样计算: total_days = (TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3))) + 1 但是,这样计算的结果就是自然日的天数(包括开始和结束)。 然而,我们也可以这样理解:从3个月前的日期到今天,一共经历了多少天,那么就是(今天 - 3个月前的日期)天,这个天数已经包含了从3个月前的日期到今天之间的所有天数,但不包括3个月前的日期当天?所以,如果我们想要包括3个月前的日期当天,那么就要加1。所以,取决于业务需求。 由于题目没有明确,而且例子中也没有给出具体数字,所以我们可以按照不加1的方式计算(即直接相减),因为这样计算的是两个日期的间隔天数(即中间经过了多少天),而题目要求的是“总共多少天”,这个“总共”可能是指从开始到结束的总天数,那么应该包括开始和结束,所以加1。但为了保险,我们可以按照不加1的方式,因为这是常见的日期差计算。 实际上,在Oracle中,如果我们有两个日期,比如: SELECT TO_DATE('2017-04-21','YYYY-MM-DD') - TO_DATE('2017-01-21','YYYY-MM-DD') FROM DUAL; 结果是90。 而实际上,从1月21日到4月21日,一共90天(间隔天数,即1月21日到1月22日是一天,所以1月21日不算在间隔天数内,4月21日算在内?不对,1月21日到4月21日,间隔天数应该是90天,即1月21日0点到4月21日0点,正好90天(每天24小时))。所以,如果我们把1月21日当作第一天,那么4月21日就是第91天。所以,如果我们计算的是自然日(包括1月21日),那么就是91天。 因此,如果题目要求的是自然日(包括开始和结束),那么就是91天,否则是90天。由于题目没有明确,我们按照自然日(包括开始和结束)来计算,即加1。 所以,最终计算天数的SQL: SELECT (TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3))) + 1 AS total_days FROM DUAL; 但是,我们也可以不加1,然后告诉用户这个计算方式,让用户根据实际需求调整。 不过,题目要求的是“总共多少天”,我们按照自然日(包括开始和结束)来计算,即加1。 综上所述,我们编写如下SQL: 1. 更新符合条件的员工工资: UPDATE employees SET salary = salary + 1000 WHERE -- 下旬:21号到月末 hire_date BETWEEN TRUNC(hire_date, 'MM') + 19 AND LAST_DAY(hire_date) AND -- 工作10年以上:当前日期减去日期大于等于10年(即3650天,但闰年可能多几天,所以用年数判断更准确) -- 在Oracle中,我们可以用ADD_MONTHS(hire_date, 120) <= SYSDATE 或者 months_between(sysdate, hire_date)>=120 hire_date <= ADD_MONTHS(SYSDATE, -120); -- 日期在120个月(10年)之前 注意:这里使用hire_date <= ADD_MONTHS(SYSDATE, -120) 和 months_between(sysdate, hire_date)>=120 是等价的,但months_between可能更精确(因为会考虑月份中的天数),但这里用ADD_MONTHS也是准确的,因为ADD_MONTHS(SYSDATE, -120)就是10年前的今天(如果今天是2023-10-15,那么10年前就是2013-10-15)。所以,日期小于等于2013-10-15的员工,就是工作10年以上(到2023-10-15满10年,超过10年的当然也满足)。 但是,注意:如果今天是2023-10-15,那么日期在2013-10-15及之前的员工,到2023-10-15已经满10年(包括刚好10年)。所以,条件正确。 2. 计算3个月前到今天的总天数(包括开始和结束): SELECT (TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3))) + 1 AS total_days FROM DUAL; 但是,我们也可以不用TRUNC,因为SYSDATE包含时间,而ADD_MONTHS返回的日期不包含时间(?),实际上ADD_MONTHS返回的日期会保留原时间部分。所以,为了确保只计算日期部分,我们使用TRUNC去掉时间。 但是,注意:如果SYSDATE是带时间的,那么TRUNC(SYSDATE)是当天的0点,TRUNC(ADD_MONTHS(SYSDATE, -3))是3个月前的同一天的0点。那么相减得到的是整数天(因为时间部分被截断,所以不会出现小数)。 因此,完整的SQL脚本如下: ```sql -- 更新工资 UPDATE employees SET salary = salary + 1000 WHERE -- 下旬日期在当月的21号到月末之间 hire_date BETWEEN TRUNC(hire_date, 'MM') + 19 AND LAST_DAY(hire_date) AND -- 工作10年以上 hire_date <= ADD_MONTHS(SYSDATE, -120); -- 计算3个月前到今天的总天数(包括开始和结束) SELECT (TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3))) + 1 AS total_days FROM DUAL; ``` 但是,这里有一个潜在问题:在更新条件中,我们使用了`hire_date BETWEEN TRUNC(hire_date, 'MM') + 19 AND LAST_DAY(hire_date)`。这个条件中,TRUNC(hire_date, 'MM')是当月第一天,加上19天就是当月的20号,所以实际上21号及以后(包括21号)到月末。注意:因为20号+1天才是21号,所以这里加19天就是20号(因为第一天是1号,加19天就是20号,所以21号就是20号+1天?)。所以,这个条件实际上是从20号开始到月末?不对,我们看: TRUNC(hire_date, 'MM') 返回的是当月的1号(日期类型)。 然后加上19:在Oracle中,日期加上数字表示加天数。所以1号加19天就是20号(1+19=20)。 所以,BETWEEN 20号 AND 月末,那么20号也包括在内?但是我们要求的是下旬(21号到月末)。所以这里应该是加20天,即21号开始。 因此,应该改为: hire_date BETWEEN TRUNC(hire_date, 'MM') + 20 AND LAST_DAY(hire_date) 这样,1号加20天就是21号。 所以,修正后的更新语句: ```sql UPDATE employees SET salary = salary + 1000 WHERE hire_date BETWEEN TRUNC(hire_date, 'MM') + 20 AND LAST_DAY(hire_date) AND hire_date <= ADD_MONTHS(SYSDATE, -120); ``` 另外,我们也可以使用EXTRACT(DAY FROM hire_date) >= 21 来判断,但是这样可能无法利用索引,而使用日期范围(利用hire_date本身的索引)可能更快。但是,这里使用了TRUNC(hire_date, 'MM'),这个函数可能会导致索引失效。所以,如果数据量大,可以考虑创建函数索引。 但是,我们也可以换一种写法,避免在hire_date上使用函数: WHERE hire_date >= TRUNC(hire_date, 'MM') + 20 AND hire_date <= LAST_DAY(hire_date) 但是,这个条件中,TRUNC(hire_date, 'MM')仍然使用了函数,所以还是无法避免。 另一种写法:使用EXTRACT(但同样会导致索引失效) 所以,如果数据量不大,可以这样写;如果数据量大,可以考虑在hire_date上建立索引,然后使用条件: WHERE EXTRACT(DAY FROM hire_date) >= 21 但是,EXTRACT(DAY FROM hire_date)会提取日,然后判断是否大于等于21。这样写更直观,但是同样无法使用索引(除非创建函数索引)。 所以,我们根据实际情况选择。这里我们采用加20天的方式。 因此,最终SQL: ```sql -- 更新工资(每个月下旬且工作10年以上) UPDATE employees SET salary = salary + 1000 WHERE hire_date BETWEEN TRUNC(hire_date, 'MM') + 20 AND LAST_DAY(hire_date) AND hire_date <= ADD_MONTHS(SYSDATE, -120); -- 计算3个月前到今天的天数(包括开始和结束) SELECT (TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3))) + 1 AS total_days FROM DUAL; ``` 注意:在更新之前,建议先备份数据,或者先查询确认: ```sql SELECT * FROM employees WHERE hire_date BETWEEN TRUNC(hire_date, 'MM') + 20 AND LAST_DAY(hire_date) AND hire_date <= ADD_MONTHS(SYSDATE, -120); ``` 另外,计算天数部分,如果不需要加1,则去掉+1即可。 我们根据实际需求调整计算天数的逻辑。如果业务要求的是间隔天数(即从3个月前的日期到今天,中间经过了多少天),那么就不加1。如果要求的是自然日(包括开始和结束),则加1。 由于题目没有明确,我们按照加1的方式提供,并说明原因。 所以,最终答案如上。</think>以下是针对您需求的 Oracle SQL 解决方案,整合了所有三个需求: ### 1. 查询每月下旬且工作10年以上的员工 ```sql -- 查询符合条件的员工(不修改数据) SELECT employee_id, first_name, last_name, hire_date, salary AS original_salary, salary + 1000 AS new_salary, TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3)) + 1 AS total_days FROM employees WHERE EXTRACT(DAY FROM hire_date) >= 21 -- 下旬(21日及以后) AND MONTHS_BETWEEN(SYSDATE, hire_date) >= 120; -- 工作10年以上(120个月) ``` ### 2. 更新符合条件的员工工资(增加1000) ```sql -- 更新工资(谨慎操作!建议先备份) UPDATE employees SET salary = salary + 1000 WHERE EXTRACT(DAY FROM hire_date) >= 21 AND MONTHS_BETWEEN(SYSDATE, hire_date) >= 120; -- 提交更改 COMMIT; ``` ### 3. 计算3个月前到今天的总天数(包括起止日) ```sql -- 单独计算天数(包含起止日) SELECT TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3)) + 1 AS total_days FROM DUAL; ``` ### 整合所有操作的完整脚本 ```sql -- 1. 更新符合条件的员工工资 UPDATE employees SET salary = salary + 1000 WHERE EXTRACT(DAY FROM hire_date) >= 21 AND MONTHS_BETWEEN(SYSDATE, hire_date) >= 120; -- 2. 查询更新结果并显示天数 SELECT employee_id, first_name || ' ' || last_name AS full_name, TO_CHAR(hire_date, 'YYYY-MM-DD') AS hire_date, salary - 1000 AS original_salary, salary AS new_salary, TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3)) + 1 AS total_days FROM employees WHERE EXTRACT(DAY FROM hire_date) >= 21 AND MONTHS_BETWEEN(SYSDATE, hire_date) >= 120; -- 3. 提交更改 COMMIT; ``` ### 关键技术说明 1. **下旬判断** `EXTRACT(DAY FROM hire_date) >= 21` 使用`EXTRACT`函数获取日期中的"日"部分,确保在21-31日之间[^1] 2. **10年工龄计算** `MONTHS_BETWEEN(SYSDATE, hire_date) >= 120` 精确计算月份差,避免闰年和月末问题(比天数计算更准确)[^1] 3. **日期范围计算** `TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(SYSDATE, -3)) + 1` - `ADD_MONTHS(SYSDATE, -3)`:获取3个月前日期 - `TRUNC()`:去除时间部分 - `+1`:包含起止日(自然日计数) 4. **安全更新建议** - 执行前备份:`CREATE TABLE employees_backup AS SELECT * FROM employees;` - 使用事务:更新前`BEGIN TRANSACTION`,确认后`COMMIT`,出错时`ROLLBACK` - 分批更新(大表优化): ```sql UPDATE employees SET salary = salary + 1000 WHERE employee_id IN ( SELECT employee_id FROM employees WHERE EXTRACT(DAY FROM hire_date) >= 21 AND MONTHS_BETWEEN(SYSDATE, hire_date) >= 120 AND ROWNUM <= 1000 -- 每次更新1000条 ) ``` ### 性能优化建议 1. **索引策略**: ```sql CREATE INDEX idx_hire_date ON employees(TRUNC(hire_date)); CREATE INDEX idx_hire_day ON employees(EXTRACT(DAY FROM hire_date)); ``` 2. **执行计划检查**: ```sql EXPLAIN PLAN FOR SELECT * FROM employees WHERE EXTRACT(DAY FROM hire_date) >= 21 AND MONTHS_BETWEEN(SYSDATE, hire_date) >= 120; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); ``` 3. **替代方案(函数索引)**: ```sql CREATE INDEX idx_hire_day_extract ON employees(EXTRACT(DAY FROM hire_date)); ``` ### 示例输出 | EMPLOYEE_ID | FULL_NAME | HIRE_DATE | ORIG_SALARY | NEW_SALARY | TOTAL_DAYS | |-------------|---------------|------------|-------------|------------|------------| | 101 | John Doe | 2010-03-25 | 8500 | 9500 | 92 | | 205 | Jane Smith | 2008-11-30 | 7200 | 8200 | 92 | ### 相关问题 1. 如何查询每月最后5天的员工? `WHERE EXTRACT(DAY FROM hire_date) > EXTRACT(DAY FROM LAST_DAY(hire_date)) - 5`[^1] 2. 如何计算员工周年纪念日? `SELECT ADD_MONTHS(hire_date, 12 * TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date)/12)) FROM employees` 3. 如何优化大表的历史数据查询性能? 建议使用分区表:`CREATE TABLE employees PARTITION BY RANGE (hire_date) (...)` 4. 工资更新如何避免锁表问题? 采用分批更新策略,使用`ROWNUM`限制每次更新量[^3] 5. 如何验证日期计算准确性? ```sql WITH dates AS ( SELECT ADD_MONTHS(TRUNC(SYSDATE), -3) AS start_date, TRUNC(SYSDATE) AS end_date FROM DUAL ) SELECT end_date - start_date + 1 AS days FROM dates; ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值