Oralce中的to_date()函数用于将字符串转换为日期对象,具体使用格式为:
		
				
				
				
						
								
										 to_date( string, 
										[
										 format_mask 
										]
										, 
										[
										 nls_language 
										]
										 )
										to_date( string, 
										[
										 format_mask 
										]
										, 
										[
										 nls_language 
										]
										 )
								
						
				 
				
						
								string1
						
				
		
		 要转换的字符串.
		
				
						
								
										format_mask
								 可选项,日期转换格式.
				
		
		
				
						
								
										nls_language
								 可选项. 指定用于转换字符串的nls language.
				
		
		其中
		
				
						format_mask主要有以下几种格式:
		
		
				
						
								| Format Code | Explanation | 
						
								| YEAR | Year, spelled out | 
						
								| YYYY | 4-digit year | 
						
								| MM | Month (01-12; JAN = 01). | 
						
								| MON | Abbreviated name of month. | 
						
								| MONTH | Name of month, padded with blanks to length of 9 characters. | 
						
								| D | Day of week (1-7). | 
						
								| DAY | Name of day. | 
						
								| DD | Day of month (1-31). | 
						
								| DDD | Day of year (1-366). | 
						
								| DY | Abbreviated name of day. | 
						
								| HH | Hour of day (1-12). | 
						
								| HH12 | Hour of day (1-12). | 
						
								| HH24 | Hour of day (0-23). | 
						
								| MI | Minute (0-59). | 
						
								| SS | Second (0-59). | 
						
								| SSSSS | Seconds past midnight (0-86399). | 
				
		
		
		
				
						[问题]
						
				
		
		
				
						ORA-01810: format code appears twice
可能是像Java那样指定日期格式,比如:
		
		
				
						to_char('2006-06-01 18:00:00' 'yyyy-mm-dd hh:MM:ss')
而在Oracle中的日期格式是不区分大小写的,所以 mm 出现了两次。
正确的写法是:
to_char('2006-06-01 18:00:00' 'yyyy-mm-dd hh:mi:ss')
ORA-01722: invalid number
可能是指定小时为hh,而hh取值范围是 1-12,所以如果指定小时为 0 点将出现这个异常,比如:
		
		
				
						to_char('2006-06-01 00:00:00' 'yyyy-mm-dd hh:MM:ss')
正确的写法是:
to_char('2006-06-01 00:00:00' 'yyyy-mm-dd hh24:MM:ss')