`
net_liu
  • 浏览: 231302 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

常用数据库转换语句

阅读更多

 以下是管理访问SQL函数,各数据库差异的函数 由于不同数据库其Sql函数不同,这里用函数封装了这种差异:

/** * instr字符替换脚本(列名),暂时只支持iEnd为1的SQL Server脚本 * * @param sStr1 * oracle中为要搜索的表达式,SQL Server中为搜索表达式 * @param sStr2 * SQL Server中为要搜索的表达式,oracle中为搜索表达式 * @param iStart * 开始位置 * @param iEnd * 仅在Oracle中起作用 * @return */ public String sqlInstr(String sStr1, String sStr2, int iStart, int iEnd) { if (dbType == DB_ORA) return "instr(" + sStr1 + "," + sStr2 + "," + iStart + "," + iEnd + ")"; if (dbType == DB_SQL) { if (iStart < 0) { sStr1 = "REPLACE(REVERSE(" + sStr2 + "),REVERSE(" + sStr1 + ")," + sStr1 + ")"; } return "charindex(" + sStr2 + "," + sStr1 + " ,ABS(" + iStart + "))"; } if (dbType == DB_DB2) return "POSSTR(" + sStr1 + "," + sStr2 + ")";// db2不支持sStart return ""; }


 

 

	/**
	 * 把字符串转成日期格式 YYYY[token]MM[token]DD
	 * 
	 * @param _stringDate
	 * @return
	 */
	public String sqlFormatStringToDate(String _stringDate, String token) {
		String sql = "";
		if (dbType == DB_ORA) {
			sql += "TO_date('" + _stringDate + "','YYYY" + token + "MM" + token
					+ "DD')";
		} else if (dbType == DB_SQL) {
			sql += "convert(datetime,'" + _stringDate+"')";
		} else if (dbType == DB_DB2) {
			sql += "TO_date('" + _stringDate + "','YYYY" + token + "MM" + token
					+ "DD')";
		} else {
			// ERROR
		}
		return sql;
	}

	/**
	 * 日期函数转换(处理列名)
	 * 
	 * @param strColName
	 *            要转换的列名或日期类型数据
	 * @param sFormat
	 *            要转换的格式
	 * @param isColName
	 *            标识是否是列名
	 * @return 返回字符串类型
	 */
	public String sqlDateS(String strColName, String sFormat, boolean isColName) {
		if (isColName) {
			if (dbType == DB_ORA) {
				return "to_char(" + strColName + ",'" + sFormat + "')";
			} else if (dbType == DB_SQL)
				return "CONVERT(VARCHAR(" + sFormat.length() + "),"
						+ strColName + ",112)";
			else if (dbType == DB_DB2)
				return "cast(" + strColName + " as VARCHAR(10))";
		} else {
			return sqlDateS(strColName, sFormat);
		}

		return "";
	}

	/**
	 * 将字符列转为日期类型
	 * 
	 * @param strColName
	 *            要转换的列名或日期类型数据
	 * @param sFormat
	 *            要转换的格式
	 * @param isColName
	 *            标识是否是列名
	 * @return 返回字符串类型
	 */
	public String sqlSColToDate(String strColName, String sFormat) {
		if (dbType == DB_ORA) {
			return "to_date(" + strColName + ",'" + sFormat + "')";
		} else if (dbType == DB_SQL) {
			return "cast(" + strColName + " as DateTime)";
		} else if (dbType == DB_DB2) {
			return "cast(" + strColName + " as DateTime)";
		}

		return "";
	}

 

	/**
	 * 把字段或日期转成token格式
	 * 
	 * @param date
	 * @return
	 */
	public String sqlFormatDate(String date, String token) {
		String SQL = "";
		if (dbType == DB_ORA) {
			SQL += "TO_CHAR(" + date + ",'YYYY" + token
					+ "MM" + token + "DD')";
		} else if (dbType == DB_SQL) {
			if (token == "") {
				SQL += "convert(varchar(120),convert(datetime," + date
						+ ") ,112)";
			} else if (token == "/") {
				SQL += "convert(varchar(120),convert(datetime," + date
						+ ") ,111)";
			} else if (token == "-") {
				SQL += "convert(varchar(120),convert(datetime," + date
						+ ") ,120)";
			} else {
				SQL += "convert(varchar(120),convert(datetime," + date
						+ ") ,112)";
			}
		} else if (dbType == DB_DB2) {
			SQL += "TO_CHAR(" + date + ",'YYYY" + token
					+ "MM" + token + "DD')";
		} else {
			// ERROR
		}
		return SQL;
	}

	
	public String sqlFToDate (String date,String token)
	{
		String SQL = "";
		if (dbType == DB_ORA) {
			SQL += "to_date('" + date + "')";
					
		} else if (dbType == DB_SQL) {
			
				SQL += "convert(datetime,'" + date
						+ "')";
			
		} else if (dbType == DB_DB2) {
			SQL += "to_date('" + date + "')";
		} else {
			// ERROR
		}
		return SQL;

  

/*
	 * 处理自增列
	 */
	public String SQLSEQUENCE(String que) {
		if (dbType == DB_ORA)
			return que + ".nextval, ";
		else if (dbType == DB_SQL) {
			return "";
		} else if (dbType == DB_DB2)
			return "NEXTVAL FOR " + que + ",";
		return "";
	}

 

	/**
	 * 按日期返回星期几
	 * 
	 * @param date
	 * @return
	 * @throws YssException
	 */
	public String getWeek(String date) throws YssException {
		// date=sqlDateS(date,"yyyy-mm-dd");
		if (dbType == DB_ORA)
			return "to_char(" + date + ",'d')";
		else if (dbType == DB_SQL)
			return "DATEPART(wk," + date + ")";
		else if (dbType == DB_DB2)
			return "DAYOFWEEK(" + date + ")";
		else
			throw new YssException("数据库类型异常!");
	}

	/**
	 * 求指定日期在一年中是第几周
	 * 
	 * @param date
	 * @return
	 * @throws YssException
	 */
	public String getWeekth(String date) throws YssException {
		// date=sqlDateS(date,"yyyy-mm-dd");
		if (dbType == DB_ORA)
			return "to_char(" + date + ",'IW')";
		else if (dbType == DB_SQL) {
			return "DATEPART(week," + date + ")";
		} else if (dbType == DB_DB2)
			return "WEEK(" + date + ")";
		else
			throw new YssException("数据库类型异常!");
	}

	/**
	 * 日期在加减时不同数据库的处理
	 * 
	 * @return
	 * @throws YssException
	 */
	public String getDay() throws YssException {
		// date=sqlDateS(date,"yyyy-mm-dd");
		if (dbType == DB_ORA)
			return "+0";
		else if (dbType == DB_SQL)
			return "+0";
		else if (dbType == DB_DB2)
			return "day";
		else
			throw new YssException("数据库类型异常!");
	}

	/**
	 * 取日期的年份
	 * 
	 * @param date
	 * @return
	 * @throws YssException
	 */
	public String getYear(String date) throws YssException {
		// date=sqlDateS(date,"yyyy-mm-dd");

		if (dbType == DB_ORA) {
			Pattern p = Pattern.compile("^\\d{4}[-]{1}\\d{1,2}[-]{1}\\d{1,2}$");
			Matcher m = p.matcher(date);// 正则匹配
			if (m.matches())
				return "to_number(to_char(to_date('" + date
						+ "','yyyy-mm-dd'),'yyyy'))";
			else
				return "to_number(to_char(" + date + ",'yyyy'))";
		} else if (dbType == DB_SQL)
			return "DATENAME(year," + date + ")";
		else if (dbType == DB_DB2)
			return "YEAR(" + date + ")";
		else
			throw new YssException("数据库类型异常!");
	}

 

/** 取模 */
	public String sqlMod(String sStr1, String sStr2, boolean bAbs) {
		if (dbType == DB_ORA)
			return (bAbs ? "abs(" : "") + "mod(" + sStr1 + "," + sStr2 + ")"
					+ (bAbs ? ")" : "");

		if (dbType == DB_SQL)
			return (bAbs ? "abs(" : "") + "(" + sStr1 + ") % (" + sStr2 + ")"
					+ (bAbs ? ")" : "");

		return (bAbs ? "abs(" : "") + "mod(" + sStr1 + ", " + sStr2 + ")"
				+ (bAbs ? ")" : "");
	}

 

	/** sqlTrim */
	public String sqlTrim(String sStr) {

		if (dbType == DB_ORA)
			return "Trim(" + sStr + ")";
		else
			return "RTrim(LTrim(" + sStr + "))";
	}

	/**
	 * 参看Oracle的NVL(Sqlserver的isnull)函数
	 */
	public String sqlIsNull(String str1, String str2) {
		if (dbType == DB_ORA)
			return "NVL(" + str1 + "," + str2 + ")";

		if (dbType == DB_SQL)
			return "IsNull(" + str1 + "," + str2 + ")";

		return "(case when " + str1 + " is null then " + str2 + " else " + str1
				+ " end)";
	}

	public String sqlIsNull(String str1) {
		return sqlIsNull(str1, "0");
	}

	// 取整 (截取) 2008-8-2
	public String sqlInt(String str) {

		if (dbType == DB_SQL) {

			return "cast(" + str + " as int)";

		} else {

			return "trunc(" + str + ")";
		}
	}

	// cxd 20090108把字符转换成double
	public String sqlDouble(String str) {

		if (dbType == DB_SQL) {

			return "cast(" + str + " as numeric(18,4))";

		}
		if (dbType == DB_DB2) {

			return "cast(" + str + " as decimal(17,4))";
		} else
			return "trunc(" + str + ",4)";

	}

	/**
	 * '整除和取模,sstr1和sstr2是整数表达式
	 */
	public String sqlIntDiv(String sStr1, String sStr2, boolean bAbs) {
		if (dbType == DB_ORA)
			return "floor(abs("
					+ sStr1
					+ ")/abs("
					+ sStr2
					+ ")) "
					+ (bAbs ? ""
							: ("* sign(" + sStr1 + ") * sign(" + sStr2 + ")"));

		return (bAbs ? "abs(" : "") + "(" + sStr1 + ") / (" + sStr2 + ")"
				+ (bAbs ? ")" : "");
	}

	/**
	 * 取日期年、月、日
	 * 
	 * @param cloumnname
	 *            String
	 * @param i
	 *            int 取年份时i从1开始
	 * @param j
	 *            int
	 * @return String
	 */
	public String sqlSubstr(String cloumn_date, int i, int j) {
		String ss = "";
		if (dbType == DB_ORA)// ora 中取年份时可以从0-4 也可以从1-4
			ss = "subStr(to_char(" + cloumn_date + ",'yyyy-mm-dd')," + i + ","
					+ j + ")";
		else if (dbType == DB_DB2)// db2 中只能从1-4
			ss = "subStr(char(" + cloumn_date + ")," + i + "," + j + ")";
		else
			ss = "SUBSTRING(CONVERT(VARCHAR(10)," + cloumn_date + ",120)," + i
					+ "," + j + ")";
		return ss;
	}

 

/**
	 * 日期加减天数
	 * 
	 * @param sDate
	 *            String:日期,如果是字符串字段,则要调用函数转换成sql日期
	 * @param sDays
	 *            String:天数
	 * @return String
	 */
	public String sqlDateAdd(String sDate, String sDays) {
		if (dbType == DB_DB2) {
			return sDate + " " + sDays + " days ";
		} else if (dbType == DB_ORA) {
			return ("to_char(to_date('" + sDate + "','"
					+ YssCons.YSS_DATEFORMAT + "')" + sDays + ")");
			// return sDate + " " + sDays;
		} else {// DATEADD (day,-1,fdate)
			return ("DATEADD (day," + sDays + "," + sDate + ")");
		}

	}

	/**
	 * 日期相减
	 * 
	 * @param sDate1
	 *            String:日期1,如果是字符串字段,则要调用函数转换成sql日期
	 * @param sDate2
	 *            String:日期同上
	 * @return String:返回date2-date1的sql表达式
	 */
	public String sqlDateDiff(String sDate1, String sDate2) {
		if (dbType == DB_DB2)
			return "days(" + sDate1 + ")-days(" + sDate2 + ")";
		else if (dbType == DB_SQL) {
			return "DATEDIFF(day," + sDate1 + "," + sDate2 + ")";
		} else
			return sDate1 + "-" + sDate2;
	}

 

 

 

分享到:
评论

相关推荐

    SQL_Sever数据库常用语句大全.zip

    SQL_Sever数据库常用语句大全.zip SQL_Sever数据库常用命令大全.zip power函数获取数值的n次方 round函数保留指定位数小数点(指定位数后四舍五入) sign函数判断正数负数和零 sqrt平方根函数 convert转换数据类型...

    数据库的(应用)常用语句

    本文将深入探讨数据库应用中的常用语句,主要关注Oracle数据库中的函数使用,结合提供的“oracle函数.doc”文档,我们将详细解析这些知识点。 首先,让我们了解数据库的基本操作,包括SELECT、INSERT、UPDATE和...

    数据库性能调优常用SQL语句

    本篇文章将详细讲解在数据库性能优化过程中常用的SQL语句及其应用,帮助你提升数据库的运行效率。 首先,我们关注的是查询优化。在SQL中,`EXPLAIN`命令是分析查询执行计划的神器。通过EXPLAIN,我们可以看到数据库...

    数据库sql语句的详解

    在这个话题中,我们将深入探讨SQL语句,特别是关于常用的SQL函数,这些函数在处理字符、数值、日期和数据转换时非常有用。 首先,让我们关注字符函数。字符函数主要用于处理文本数据,它们接受字符输入并返回字符或...

    50个常用sql语句.rar

    1. **SELECT语句**:这是SQL中最常用的语句,用于从数据库中检索数据。你可以根据需要选择一个或多个列,并使用WHERE子句来过滤结果。 2. **FROM子句**:配合SELECT语句,指定要从哪个表中提取数据。 3. **WHERE...

    excel表生成数据库SQL插入语句工具

    Excel表格在许多业务场景下是数据管理的常用工具,但当需要将大量数据导入数据库时,手动编写SQL插入语句会非常耗时且容易出错。"Excel表生成数据库SQL插入语句工具"正是为了解决这个问题而设计的。这款工具能够自动...

    数据库常用语句

    本篇文章将深入探讨“数据库常用语句”,特别是基于Java Database Connectivity (JDBC) API的操作,帮助你理解如何利用SQL语言和相关函数优化数据库操作。 首先,JDBC是Java平台的标准接口,用于连接Java应用程序和...

    数据库中常用的数据类型转换

    "数据库中常用的数据类型转换" 在数据库应用程序中,数据类型转换是一个非常重要的知识点。由于数据库中的数据类型和应用程序中的数据类型可能不同,因此在进行数据交换时,需要进行类型转换。今天,我们将总结...

    试析Oracle数据库SQL语句的性能优化.pdf

    在探讨Oracle数据库SQL语句性能优化的背景下,文章主要介绍了一些提高数据库性能的基本原则、常用措施,并分析了SQL语句的执行过程,从而指导编程人员或数据库运维人员编写出高质量的SQL语句,减少资源占用,提高...

    GreenPlum常用数据库命令

    ### GreenPlum数据库常用命令详解 #### 一、数据库启动:`gpstart` - **基本用法**:`gpstart` 是Greenplum数据库管理工具的一部分,主要用于启动Greenplum数据库集群。 - **常用参数**: - `-a`: 直接启动,不...

    SQL常用增删改查语句

    SQL常用增删改查语句 SQL 是一种广泛使用的数据库语言,用于管理关系数据库管理系统(RDBMS)。本文档总结了 SQL 中常用的增删改查语句,包括基本语句、高级查询语句、函数查询语句、事务和存储过程等。 一、...

    SQL_Server,Oracle,DB2数据库SQL语句比较

    在所有三种数据库中,都可以使用CASE语句进行条件判断和值转换。例如,在SQL Server中,可以使用`CASE WHEN condition THEN result ELSE alternative END`的结构。 ### 7. 字符串操作函数 字符串长度在三种数据库...

    KETTLE常用数据库的JAR包

    标题中的"KETTLE常用数据库的JAR包"指的是Kettle在连接和操作不同数据库时需要的特定JDBC驱动的JAR文件。这些JAR文件包含了必要的API和实现,使得Kettle能够识别并正确地与数据库服务器通信,执行SQL语句,读取、...

    DB2常用语句集萃

    【DB2常用语句集萃】中的知识点涵盖了SQL查询的多个方面,主要涉及了数据的检索、聚合、分组、转换以及联接操作。以下是对这些知识点的详细说明: 1. **空值处理**:使用`ISNULL`函数来处理NULL值,例如`isnull...

    生成数据库表insert语句脚本

    在数据库管理中,生成数据库表的INSERT语句脚本是一项常用的任务,特别是在数据迁移、备份或测试环境中。INSERT语句是SQL语言的一部分,用于向数据库表中插入新的数据记录。以下将详细介绍如何生成这些脚本以及其在...

    oracle常用SQL语句(汇总版).docx

    Oracle 常用 SQL 语句汇总 Oracle 是一个功能强大且复杂的关系数据库管理系统,它提供了多种 SQL 语句来管理和操作数据库。在本文中,我们将详细介绍 Oracle 中常用的 SQL 语句,包括数据控制语句(DML)、数据定义...

    数据库操作语句

    本文档主要涵盖了一系列常用数据库操作语句,特别是与时间处理和表操作相关的知识点。这些语句在日常开发和维护中非常常见,对理解数据库管理和数据处理至关重要。 首先,我们来看时间处理。在数据库中,时间戳和...

    网站调试数据库转换技术案例汇集.doc

    【网站调试数据库转换技术】是IT领域中一项重要的工作,特别是在构建和维护网站时,数据库的转换可能因为各种原因变得必要。例如,从旧的数据库系统迁移到新的、更高效或者更符合业务需求的数据库系统。在这个过程中...

Global site tag (gtag.js) - Google Analytics