首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

CowNewSQL 新版本發布:跨資料庫 SQL 翻譯引擎支援 DDL、百條複雜 SQL 測試通過、JDK 1.4+ 相容

     編輯:關於SqlServer

版本亮點

  • DDL 支援落地: 新增 `CREATE TABLE`、`DROP TABLE`、`CREATE INDEX`、`DROP INDEX` 翻譯,覆蓋結構遷移核心需求。
  • 穩健性驗證: 收集近百條各類複雜 SQL (含子查詢、Join、Union、巢狀函數) 實測通過,核心翻譯引擎穩定可用。
  • 文件完善: 語法規範、SQL 範例、函數對照表、API 使用手冊一應俱全,降低接入門檻。
  • 環境相容: 支援 JDK 1.4 或更高版本,適配老舊 Java 專案 (WebLogic 8.1、WebSphere 5/6 等)。

產品定位:跨資料庫 SQL 方言翻譯器

痛點: 不同資料庫 (Oracle, SQL Server, MySQL, PostgreSQL, DB2...) SQL 方言差異大:函數名、分頁語法、日期運算、DDL 型別映射... 導致:

  1. 多資料庫版本維護成本高 (同一邏輯寫多套 SQL)。
  2. 開發需精通多種方言,認知負擔重。
  3. ORM (Hibernate HQL) 雖屏蔽差異,但高效能場景仍需直寫 Native SQL,翻譯需求依然存在。

方案: CowNewSQL 作為 **SQL 翻譯中介層**,開發者寫 **統一標準 SQL (CowNewSQL 方言)**,框架自動翻譯為目標資料庫原生 SQL。

核心翻譯能力展示

1. 日期時間函數統一

標準寫法 (CowNewSQL)SQL ServerMySQLOracle
SELECT NOW()SELECT GETDATE()SELECT NOW()SELECT SYSDATE FROM DUAL
SELECT CURRENT_DATESELECT CAST(GETDATE() AS DATE)SELECT CURDATE()SELECT TRUNC(SYSDATE) FROM DUAL

**兼容性:** 輸入 `SELECT GETDATE()` 也能正確翻譯為目標平台對應函數。

2. 分頁查詢統一

標準寫法SQL Server (2005-2012)MySQL / PostgreSQLOracle (11g-)
SELECT TOP 10 * FROM T_1SELECT TOP 10 * FROM T_1SELECT * FROM T_1 LIMIT 10SELECT * FROM T_1 WHERE ROWNUM <= 10
SELECT * FROM T_1 LIMIT 20 OFFSET 10 (標準 SQL:2008)SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ...) AS RN, * FROM T_1) T WHERE RN BETWEEN 11 AND 30SELECT * FROM T_1 LIMIT 20 OFFSET 10SELECT * FROM (SELECT ROWNUM RN, T.* FROM T_1) WHERE RN BETWEEN 11 AND 30

3. 子查詢 LIMIT 相容性包裝 (MySQL 限制繞過)

-- 原始 SQL (MySQL 不支援子查詢中 LIMIT)
DELETE FROM T_SaleInvoice 
WHERE FId IN (SELECT TOP 5 FParentId FROM T_SaleInvoiceDetails)

-- CowNewSQL 翻譯後 (MySQL 可執行)
DELETE FROM T_SaleInvoice 
WHERE FId IN (SELECT * FROM (SELECT FParentId FROM T_SaleInvoiceDetails LIMIT 0, 5) t_temp_sub)

引擎自動識別目標資料庫限制,採用 **衍生表包裝** 策略繞過限制。

4. 缺失函數模擬 (MySQL 無 MONTHS_BETWEEN)

-- 開發者統一使用
SELECT MONTHS_BETWEEN(date1, date2) FROM DUAL

-- MySQL 翻譯為組合函數
SELECT FLOOR((YEAR(date1) - YEAR(date2)) * 12 + (MONTH(date1) - MONTH(date2)) 
             + (DAY(date1) - DAY(date2)) / 31) FROM DUAL

使用者無需關心內部實現差異。

支援範圍總覽

類別支援項目
DDLCREATE TABLE, DROP TABLE, CREATE INDEX, DROP INDEX
DMLSELECT, INSERT, DELETE, UPDATE
進階特性子查詢 (相關/非相關), JOIN (INNER/LEFT/RIGHT/FULL), UNION/UNION ALL/INTERSECT/EXCEPT
日期函數當前日期/時間, 提取年/月/日/時/分/秒, 日期差異 (天/月/年), 日期加減間隔
數學函數ABS, PI, ROUND, CEIL/FLOOR, LOG/EXP, POWER, SQRT, RAND, SIGN, MOD
字串函數SUBSTRING, LENGTH/CHAR_LENGTH, TRIM, UPPER/LOWER, CONCAT/||, REPLACE, LPAD/RPAD
資料處理CAST/CONVERT (型別轉換), TO_CHAR/TO_DATE (格式化), COALESCE/NVL/IFNULL (空值處理), CASE WHEN

整合方式

// Maven 依賴 (假設發布至中央倉)

    com.cownew
    cownewsql
    1.2.0  // 最新版本號


// 程式碼調用
CowNewSQLTranslator translator = new CowNewSQLTranslator(TargetDatabase.MYSQL);
String nativeSql = translator.translate("SELECT TOP 10 * FROM T_1 WHERE CREATE_TIME > NOW() - INTERVAL '7 DAY'");
// 產生: SELECT * FROM T_1 WHERE CREATE_TIME > DATE_SUB(NOW(), INTERVAL 7 DAY) LIMIT 10

下載與資源

同類產品對比參考

產品授權支援資料庫成熟度備註
CowNewSQL商業/開源雙模式 (官網確認)Oracle, SQL Server, MySQL, PostgreSQL, DB2, Derby...生產就緒 (百條測試)中文文件友善、JDK 1.4+ 相容
Apache CalciteApache 2.0通用關係代數 + 適配器 (Cassandra, Druid, Elasticsearch...)頂級專案、極高架構更宏大、學習曲線陡、適合構建查詢引擎
Hibernate DialectLGPL主流關係型資料庫成熟僅限 HQL/Criteria → SQL,不支援任意 Native SQL 翻譯
jOOQ商業/ASL 2.0 (社群版)20+ 資料庫極高類型安全 SQL 建構器、支援原生 SQL 解析/翻譯 (專業版)
MyBatis / SqlBuilderApache 2.0主流高動態 SQL 模板、不具備方言翻譯能力

結語: CowNewSQL 以 **輕量級、專注 SQL 方言翻譯、相容舊版 JDK** 切入,為無法全面引入 JPA/jOOQ 的存量 Java 專案提供了低成本跨資料庫遷移路徑。建議團隊在 PoC 階段以真實業務 SQL 集測試驗證翻譯正確性後再決策採用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved