001/* 002 * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package com.mybatisflex.core.query; 017 018import com.mybatisflex.core.util.ArrayUtil; 019import com.mybatisflex.core.util.LambdaGetter; 020import com.mybatisflex.core.util.LambdaUtil; 021 022import static com.mybatisflex.core.constant.FuncName.*; 023 024/** 025 * SQL 函数。 026 */ 027@SuppressWarnings("unused") 028public class QueryMethods { 029 030 private QueryMethods() { 031 } 032 033 // === 数学函数 === 034 035 /** 036 * 返回 x 的绝对值。 037 */ 038 public static QueryColumn abs(String columnX) { 039 return new FunctionQueryColumn(ABS, columnX); 040 } 041 042 /** 043 * 返回 x 的绝对值。 044 */ 045 public static QueryColumn abs(QueryColumn columnX) { 046 return new FunctionQueryColumn(ABS, columnX); 047 } 048 049 /** 050 * 返回 x 的绝对值。 051 */ 052 public static <T> QueryColumn abs(LambdaGetter<T> columnX) { 053 return new FunctionQueryColumn(ABS, LambdaUtil.getQueryColumn(columnX)); 054 } 055 056 /** 057 * 返回大于或等于 x 的最小整数(向上取整)。 058 */ 059 public static QueryColumn ceil(String columnX) { 060 return new FunctionQueryColumn(CEIL, columnX); 061 } 062 063 /** 064 * 返回大于或等于 x 的最小整数(向上取整)。 065 */ 066 public static QueryColumn ceil(QueryColumn columnX) { 067 return new FunctionQueryColumn(CEIL, columnX); 068 } 069 070 /** 071 * 返回大于或等于 x 的最小整数(向上取整)。 072 */ 073 public static <T> QueryColumn ceil(LambdaGetter<T> columnX) { 074 return new FunctionQueryColumn(CEIL, LambdaUtil.getQueryColumn(columnX)); 075 } 076 077 /** 078 * 返回大于或等于 x 的最小整数(向上取整)。 079 */ 080 public static QueryColumn ceiling(String columnX) { 081 return new FunctionQueryColumn(CEILING, columnX); 082 } 083 084 /** 085 * 返回大于或等于 x 的最小整数(向上取整)。 086 */ 087 public static QueryColumn ceiling(QueryColumn columnX) { 088 return new FunctionQueryColumn(CEILING, columnX); 089 } 090 091 /** 092 * 返回大于或等于 x 的最小整数(向上取整)。 093 */ 094 public static <T> QueryColumn ceiling(LambdaGetter<T> columnX) { 095 return new FunctionQueryColumn(CEILING, LambdaUtil.getQueryColumn(columnX)); 096 } 097 098 /** 099 * 返回小于或等于 x 的最大整数(向下取整)。 100 */ 101 public static QueryColumn floor(String columnX) { 102 return new FunctionQueryColumn(FLOOR, columnX); 103 } 104 105 /** 106 * 返回小于或等于 x 的最大整数(向下取整)。 107 */ 108 public static QueryColumn floor(QueryColumn columnX) { 109 return new FunctionQueryColumn(FLOOR, columnX); 110 } 111 112 /** 113 * 返回小于或等于 x 的最大整数(向下取整)。 114 */ 115 public static <T> QueryColumn floor(LambdaGetter<T> columnX) { 116 return new FunctionQueryColumn(FLOOR, LambdaUtil.getQueryColumn(columnX)); 117 } 118 119 /** 120 * 返回 0~1 的随机数。 121 */ 122 public static QueryColumn rand() { 123 return new FunctionQueryColumn(RAND); 124 } 125 126 /** 127 * 返回 0~1 的随机数,x 值相同时返回的随机数相同。 128 */ 129 public static QueryColumn rand(String columnX) { 130 return new FunctionQueryColumn(RAND, columnX); 131 } 132 133 /** 134 * 返回 0~1 的随机数,x 值相同时返回的随机数相同。 135 */ 136 public static QueryColumn rand(QueryColumn columnX) { 137 return new FunctionQueryColumn(RAND, columnX); 138 } 139 140 /** 141 * 返回 0~1 的随机数,x 值相同时返回的随机数相同。 142 */ 143 public static <T> QueryColumn rand(LambdaGetter<T> columnX) { 144 return new FunctionQueryColumn(RAND, LambdaUtil.getQueryColumn(columnX)); 145 } 146 147 /** 148 * 返回 x 的符号,x 是负数、0、正数分别返回 -1、0、1。 149 */ 150 public static QueryColumn sign(String columnX) { 151 return new FunctionQueryColumn(SIGN, columnX); 152 } 153 154 /** 155 * 返回 x 的符号,x 是负数、0、正数分别返回 -1、0、1。 156 */ 157 public static QueryColumn sign(QueryColumn columnX) { 158 return new FunctionQueryColumn(SIGN, columnX); 159 } 160 161 /** 162 * 返回 x 的符号,x 是负数、0、正数分别返回 -1、0、1。 163 */ 164 public static <T> QueryColumn sign(LambdaGetter<T> columnX) { 165 return new FunctionQueryColumn(SIGN, LambdaUtil.getQueryColumn(columnX)); 166 } 167 168 /** 169 * 返回圆周率。 170 */ 171 public static QueryColumn pi() { 172 return new FunctionQueryColumn(PI); 173 } 174 175 /** 176 * 返回数值 x 保留到小数点后 y 位的值。 177 */ 178 public static QueryColumn truncate(String columnX, String columnY) { 179 return new FunctionQueryColumn(TRUNCATE, columnX, columnY); 180 } 181 182 /** 183 * 返回数值 x 保留到小数点后 y 位的值。 184 */ 185 public static QueryColumn truncate(QueryColumn columnX, QueryColumn columnY) { 186 return new FunctionQueryColumn(TRUNCATE, columnX, columnY); 187 } 188 189 /** 190 * 返回数值 x 保留到小数点后 y 位的值。 191 */ 192 public static <X, Y> QueryColumn truncate(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 193 return new FunctionQueryColumn(TRUNCATE, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 194 } 195 196 /** 197 * 返回数值 x 保留到小数点后 y 位的值。 198 */ 199 public static QueryColumn truncate(String columnX, Integer y) { 200 return new FunctionQueryColumn(TRUNCATE, new QueryColumn(columnX), number(y)); 201 } 202 203 /** 204 * 返回数值 x 保留到小数点后 y 位的值。 205 */ 206 public static QueryColumn truncate(QueryColumn columnX, Integer y) { 207 return new FunctionQueryColumn(TRUNCATE, columnX, number(y)); 208 } 209 210 /** 211 * 返回数值 x 保留到小数点后 y 位的值。 212 */ 213 public static <T> QueryColumn truncate(LambdaGetter<T> columnX, Integer y) { 214 return new FunctionQueryColumn(TRUNCATE, LambdaUtil.getQueryColumn(columnX), number(y)); 215 } 216 217 /** 218 * 返回离 x 最近的整数(四舍五入)。 219 */ 220 public static QueryColumn round(String columnX) { 221 return new FunctionQueryColumn(ROUND, columnX); 222 } 223 224 /** 225 * 返回离 x 最近的整数(四舍五入)。 226 */ 227 public static QueryColumn round(QueryColumn columnX) { 228 return new FunctionQueryColumn(ROUND, columnX); 229 } 230 231 /** 232 * 返回离 x 最近的整数(四舍五入)。 233 */ 234 public static <T> QueryColumn round(LambdaGetter<T> columnX) { 235 return new FunctionQueryColumn(ROUND, LambdaUtil.getQueryColumn(columnX)); 236 } 237 238 /** 239 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 240 */ 241 public static QueryColumn round(String columnX, String columnY) { 242 return new FunctionQueryColumn(ROUND, columnX, columnY); 243 } 244 245 /** 246 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 247 */ 248 public static QueryColumn round(QueryColumn columnX, QueryColumn columnY) { 249 return new FunctionQueryColumn(ROUND, columnX, columnY); 250 } 251 252 /** 253 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 254 */ 255 public static <X, Y> QueryColumn round(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 256 return new FunctionQueryColumn(ROUND, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 257 } 258 259 /** 260 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 261 */ 262 public static QueryColumn round(String columnX, Integer y) { 263 return new FunctionQueryColumn(ROUND, new QueryColumn(columnX), number(y)); 264 } 265 266 /** 267 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 268 */ 269 public static QueryColumn round(QueryColumn columnX, Integer y) { 270 return new FunctionQueryColumn(ROUND, columnX, number(y)); 271 } 272 273 /** 274 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 275 */ 276 public static <T> QueryColumn round(LambdaGetter<T> columnX, Integer y) { 277 return new FunctionQueryColumn(ROUND, LambdaUtil.getQueryColumn(columnX), number(y)); 278 } 279 280 /** 281 * 返回 x 的 y 次方。 282 */ 283 public static QueryColumn pow(String columnX, String columnY) { 284 return new FunctionQueryColumn(POW, columnX, columnY); 285 } 286 287 /** 288 * 返回 x 的 y 次方。 289 */ 290 public static QueryColumn pow(QueryColumn columnX, QueryColumn columnY) { 291 return new FunctionQueryColumn(POW, columnX, columnY); 292 } 293 294 /** 295 * 返回 x 的 y 次方。 296 */ 297 public static <X, Y> QueryColumn pow(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 298 return new FunctionQueryColumn(POW, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 299 } 300 301 /** 302 * 返回 x 的 y 次方。 303 */ 304 public static QueryColumn pow(String columnX, Integer y) { 305 return new FunctionQueryColumn(POW, new QueryColumn(columnX), number(y)); 306 } 307 308 /** 309 * 返回 x 的 y 次方。 310 */ 311 public static QueryColumn pow(QueryColumn columnX, Integer y) { 312 return new FunctionQueryColumn(POW, columnX, number(y)); 313 } 314 315 /** 316 * 返回 x 的 y 次方。 317 */ 318 public static <T> QueryColumn pow(LambdaGetter<T> columnX, Integer y) { 319 return new FunctionQueryColumn(POW, LambdaUtil.getQueryColumn(columnX), number(y)); 320 } 321 322 /** 323 * 返回 x 的 y 次方。 324 */ 325 public static QueryColumn power(String columnX, String columnY) { 326 return new FunctionQueryColumn(POWER, columnX, columnY); 327 } 328 329 /** 330 * 返回 x 的 y 次方。 331 */ 332 public static QueryColumn power(QueryColumn columnX, QueryColumn columnY) { 333 return new FunctionQueryColumn(POWER, columnX, columnY); 334 } 335 336 /** 337 * 返回 x 的 y 次方。 338 */ 339 public static <X, Y> QueryColumn power(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 340 return new FunctionQueryColumn(POWER, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 341 } 342 343 /** 344 * 返回 x 的 y 次方。 345 */ 346 public static QueryColumn power(String columnX, Integer y) { 347 return new FunctionQueryColumn(POWER, new QueryColumn(columnX), number(y)); 348 } 349 350 /** 351 * 返回 x 的 y 次方。 352 */ 353 public static QueryColumn power(QueryColumn columnX, Integer y) { 354 return new FunctionQueryColumn(POWER, columnX, number(y)); 355 } 356 357 /** 358 * 返回 x 的 y 次方。 359 */ 360 public static <T> QueryColumn power(LambdaGetter<T> columnX, Integer y) { 361 return new FunctionQueryColumn(POWER, LambdaUtil.getQueryColumn(columnX), number(y)); 362 } 363 364 /** 365 * 返回 x 的平方根。 366 */ 367 public static QueryColumn sqrt(String columnX) { 368 return new FunctionQueryColumn(SQRT, columnX); 369 } 370 371 /** 372 * 返回 x 的平方根。 373 */ 374 public static QueryColumn sqrt(QueryColumn columnX) { 375 return new FunctionQueryColumn(SQRT, columnX); 376 } 377 378 /** 379 * 返回 x 的平方根。 380 */ 381 public static <T> QueryColumn sqrt(LambdaGetter<T> columnX) { 382 return new FunctionQueryColumn(SQRT, LambdaUtil.getQueryColumn(columnX)); 383 } 384 385 /** 386 * 返回 e 的 x 次方。 387 */ 388 public static QueryColumn exp(String columnX) { 389 return new FunctionQueryColumn(EXP, columnX); 390 } 391 392 /** 393 * 返回 e 的 x 次方。 394 */ 395 public static QueryColumn exp(QueryColumn columnX) { 396 return new FunctionQueryColumn(EXP, columnX); 397 } 398 399 /** 400 * 返回 e 的 x 次方。 401 */ 402 public static <T> QueryColumn exp(LambdaGetter<T> columnX) { 403 return new FunctionQueryColumn(EXP, LambdaUtil.getQueryColumn(columnX)); 404 } 405 406 /** 407 * 返回 x 除以 y 以后的余数。 408 */ 409 public static QueryColumn mod(String columnX, String columnY) { 410 return new FunctionQueryColumn(MOD, columnX, columnY); 411 } 412 413 /** 414 * 返回 x 除以 y 以后的余数。 415 */ 416 public static QueryColumn mod(QueryColumn columnX, QueryColumn columnY) { 417 return new FunctionQueryColumn(MOD, columnX, columnY); 418 } 419 420 /** 421 * 返回 x 除以 y 以后的余数。 422 */ 423 public static <X, Y> QueryColumn mod(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 424 return new FunctionQueryColumn(MOD, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 425 } 426 427 /** 428 * 返回 x 除以 y 以后的余数。 429 */ 430 public static QueryColumn mod(String columnX, Integer y) { 431 return new FunctionQueryColumn(MOD, new QueryColumn(columnX), number(y)); 432 } 433 434 /** 435 * 返回 x 除以 y 以后的余数。 436 */ 437 public static QueryColumn mod(QueryColumn columnX, Integer y) { 438 return new FunctionQueryColumn(MOD, columnX, number(y)); 439 } 440 441 /** 442 * 返回 x 除以 y 以后的余数。 443 */ 444 public static <T> QueryColumn mod(LambdaGetter<T> columnX, Integer y) { 445 return new FunctionQueryColumn(MOD, LambdaUtil.getQueryColumn(columnX), number(y)); 446 } 447 448 /** 449 * 返回自然对数(以 e 为底的对数)。 450 */ 451 public static QueryColumn log(String columnX) { 452 return new FunctionQueryColumn(LOG, columnX); 453 } 454 455 /** 456 * 返回自然对数(以 e 为底的对数)。 457 */ 458 public static QueryColumn log(QueryColumn columnX) { 459 return new FunctionQueryColumn(LOG, columnX); 460 } 461 462 /** 463 * 返回自然对数(以 e 为底的对数)。 464 */ 465 public static <T> QueryColumn log(LambdaGetter<T> columnX) { 466 return new FunctionQueryColumn(LOG, LambdaUtil.getQueryColumn(columnX)); 467 } 468 469 /** 470 * 返回以 10 为底的对数。 471 */ 472 public static QueryColumn log10(String columnX) { 473 return new FunctionQueryColumn(LOG10, columnX); 474 } 475 476 /** 477 * 返回以 10 为底的对数。 478 */ 479 public static QueryColumn log10(QueryColumn columnX) { 480 return new FunctionQueryColumn(LOG10, columnX); 481 } 482 483 /** 484 * 返回以 10 为底的对数。 485 */ 486 public static <T> QueryColumn log10(LambdaGetter<T> columnX) { 487 return new FunctionQueryColumn(LOG10, LambdaUtil.getQueryColumn(columnX)); 488 } 489 490 /** 491 * 将角度转换为弧度。 492 */ 493 public static QueryColumn radians(String columnX) { 494 return new FunctionQueryColumn(RADIANS, columnX); 495 } 496 497 /** 498 * 将角度转换为弧度。 499 */ 500 public static QueryColumn radians(QueryColumn columnX) { 501 return new FunctionQueryColumn(RADIANS, columnX); 502 } 503 504 /** 505 * 将角度转换为弧度。 506 */ 507 public static <T> QueryColumn radians(LambdaGetter<T> columnX) { 508 return new FunctionQueryColumn(RADIANS, LambdaUtil.getQueryColumn(columnX)); 509 } 510 511 /** 512 * 将弧度转换为角度。 513 */ 514 public static QueryColumn degrees(String columnX) { 515 return new FunctionQueryColumn(DEGREES, columnX); 516 } 517 518 /** 519 * 将弧度转换为角度。 520 */ 521 public static QueryColumn degrees(QueryColumn columnX) { 522 return new FunctionQueryColumn(DEGREES, columnX); 523 } 524 525 /** 526 * 将弧度转换为角度。 527 */ 528 public static <T> QueryColumn degrees(LambdaGetter<T> columnX) { 529 return new FunctionQueryColumn(DEGREES, LambdaUtil.getQueryColumn(columnX)); 530 } 531 532 /** 533 * 求正弦值。 534 */ 535 public static QueryColumn sin(String columnX) { 536 return new FunctionQueryColumn(SIN, columnX); 537 } 538 539 /** 540 * 求正弦值。 541 */ 542 public static QueryColumn sin(QueryColumn columnX) { 543 return new FunctionQueryColumn(SIN, columnX); 544 } 545 546 /** 547 * 求正弦值。 548 */ 549 public static <T> QueryColumn sin(LambdaGetter<T> columnX) { 550 return new FunctionQueryColumn(SIN, LambdaUtil.getQueryColumn(columnX)); 551 } 552 553 /** 554 * 求反正弦值。 555 */ 556 public static QueryColumn asin(String columnX) { 557 return new FunctionQueryColumn(ASIN, columnX); 558 } 559 560 /** 561 * 求反正弦值。 562 */ 563 public static QueryColumn asin(QueryColumn columnX) { 564 return new FunctionQueryColumn(ASIN, columnX); 565 } 566 567 /** 568 * 求反正弦值。 569 */ 570 public static <T> QueryColumn asin(LambdaGetter<T> columnX) { 571 return new FunctionQueryColumn(ASIN, LambdaUtil.getQueryColumn(columnX)); 572 } 573 574 /** 575 * 求余弦值。 576 */ 577 public static QueryColumn cos(String columnX) { 578 return new FunctionQueryColumn(COS, columnX); 579 } 580 581 /** 582 * 求余弦值。 583 */ 584 public static QueryColumn cos(QueryColumn columnX) { 585 return new FunctionQueryColumn(COS, columnX); 586 } 587 588 /** 589 * 求余弦值。 590 */ 591 public static <T> QueryColumn cos(LambdaGetter<T> columnX) { 592 return new FunctionQueryColumn(COS, LambdaUtil.getQueryColumn(columnX)); 593 } 594 595 /** 596 * 求反余弦值。 597 */ 598 public static QueryColumn acos(String columnX) { 599 return new FunctionQueryColumn(ACOS, columnX); 600 } 601 602 /** 603 * 求反余弦值。 604 */ 605 public static QueryColumn acos(QueryColumn columnX) { 606 return new FunctionQueryColumn(ACOS, columnX); 607 } 608 609 /** 610 * 求反余弦值。 611 */ 612 public static <T> QueryColumn acos(LambdaGetter<T> columnX) { 613 return new FunctionQueryColumn(ACOS, LambdaUtil.getQueryColumn(columnX)); 614 } 615 616 /** 617 * 求正切值。 618 */ 619 public static QueryColumn tan(String columnX) { 620 return new FunctionQueryColumn(TAN, columnX); 621 } 622 623 /** 624 * 求正切值。 625 */ 626 public static QueryColumn tan(QueryColumn columnX) { 627 return new FunctionQueryColumn(TAN, columnX); 628 } 629 630 /** 631 * 求正切值。 632 */ 633 public static <T> QueryColumn tan(LambdaGetter<T> columnX) { 634 return new FunctionQueryColumn(TAN, LambdaUtil.getQueryColumn(columnX)); 635 } 636 637 /** 638 * 求反正切值。 639 */ 640 public static QueryColumn atan(String columnX) { 641 return new FunctionQueryColumn(ATAN, columnX); 642 } 643 644 /** 645 * 求反正切值。 646 */ 647 public static QueryColumn atan(QueryColumn columnX) { 648 return new FunctionQueryColumn(ATAN, columnX); 649 } 650 651 /** 652 * 求反正切值。 653 */ 654 public static <T> QueryColumn atan(LambdaGetter<T> columnX) { 655 return new FunctionQueryColumn(ATAN, LambdaUtil.getQueryColumn(columnX)); 656 } 657 658 /** 659 * 求余切值。 660 */ 661 public static QueryColumn cot(String columnX) { 662 return new FunctionQueryColumn(COT, columnX); 663 } 664 665 /** 666 * 求余切值。 667 */ 668 public static QueryColumn cot(QueryColumn columnX) { 669 return new FunctionQueryColumn(COT, columnX); 670 } 671 672 /** 673 * 求余切值。 674 */ 675 public static <T> QueryColumn cot(LambdaGetter<T> columnX) { 676 return new FunctionQueryColumn(COT, LambdaUtil.getQueryColumn(columnX)); 677 } 678 679 // === 字符串函数 === 680 681 /** 682 * 返回字符串 s 的字符数。 683 */ 684 public static QueryColumn charLength(String columnS) { 685 return new FunctionQueryColumn(CHAR_LENGTH, columnS); 686 } 687 688 /** 689 * 返回字符串 s 的字符数。 690 */ 691 public static QueryColumn charLength(QueryColumn columnS) { 692 return new FunctionQueryColumn(CHAR_LENGTH, columnS); 693 } 694 695 /** 696 * 返回字符串 s 的字符数。 697 */ 698 public static <T> QueryColumn charLength(LambdaGetter<T> columnS) { 699 return new FunctionQueryColumn(CHAR_LENGTH, LambdaUtil.getQueryColumn(columnS)); 700 } 701 702 /** 703 * 返回字符串 s 的长度。 704 */ 705 public static QueryColumn length(String columnS) { 706 return new FunctionQueryColumn(LENGTH, columnS); 707 } 708 709 /** 710 * 返回字符串 s 的长度。 711 */ 712 public static QueryColumn length(QueryColumn columnS) { 713 return new FunctionQueryColumn(LENGTH, columnS); 714 } 715 716 /** 717 * 返回字符串 s 的长度。 718 */ 719 public static <T> QueryColumn length(LambdaGetter<T> columnS) { 720 return new FunctionQueryColumn(LENGTH, LambdaUtil.getQueryColumn(columnS)); 721 } 722 723 /** 724 * 将字符串 s1,s2 等多个字符串合并为一个字符串。 725 */ 726 public static QueryColumn concat(String columnS1, String columnS2, String... columnN) { 727 return new FunctionQueryColumn(CONCAT, ArrayUtil.concat(new String[]{columnS1, columnS2}, columnN)); 728 } 729 730 /** 731 * 将字符串 s1,s2 等多个字符串合并为一个字符串。 732 */ 733 public static QueryColumn concat(QueryColumn columnS1, QueryColumn columnS2, QueryColumn... columnN) { 734 return new FunctionQueryColumn(CONCAT, ArrayUtil.concat(new QueryColumn[]{columnS1, columnS2}, columnN)); 735 } 736 737 /** 738 * 同 CONCAT(s1, s2, ...),但是每个字符串之间要加上 x。 739 */ 740 public static QueryColumn concatWs(String columnX, String columnS1, String columnS2, String... columnN) { 741 return new FunctionQueryColumn(CONCAT_WS, ArrayUtil.concat(new String[]{columnX, columnS1, columnS2}, columnN)); 742 } 743 744 /** 745 * 同 CONCAT(s1, s2, ...),但是每个字符串之间要加上 x。 746 */ 747 public static QueryColumn concatWs(QueryColumn columnX, QueryColumn columnS1, QueryColumn columnS2, QueryColumn... columnN) { 748 return new FunctionQueryColumn(CONCAT_WS, ArrayUtil.concat(new QueryColumn[]{columnX, columnS1, columnS2}, columnN)); 749 } 750 751 /** 752 * 将字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串。 753 */ 754 public static QueryColumn insert(String columnS1, String columnX, String columnLen, String columnS2) { 755 return new FunctionQueryColumn(INSERT, columnS1, columnX, columnLen, columnS2); 756 } 757 758 /** 759 * 将字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串。 760 */ 761 public static QueryColumn insert(QueryColumn columnS1, QueryColumn columnX, QueryColumn columnLen, QueryColumn columnS2) { 762 return new FunctionQueryColumn(INSERT, columnS1, columnX, columnLen, columnS2); 763 } 764 765 /** 766 * 将字符串 s 的所有字符都变成大写字母。 767 */ 768 public static QueryColumn upper(String columnS) { 769 return new FunctionQueryColumn(UPPER, columnS); 770 } 771 772 /** 773 * 将字符串 s 的所有字符都变成大写字母。 774 */ 775 public static QueryColumn upper(QueryColumn columnS) { 776 return new FunctionQueryColumn(UPPER, columnS); 777 } 778 779 /** 780 * 将字符串 s 的所有字符都变成大写字母。 781 */ 782 public static <T> QueryColumn upper(LambdaGetter<T> columnS) { 783 return new FunctionQueryColumn(UPPER, LambdaUtil.getQueryColumn(columnS)); 784 } 785 786 /** 787 * 将字符串 s 的所有字符都变成小写字母。 788 */ 789 public static QueryColumn lower(String columnS) { 790 return new FunctionQueryColumn(LOWER, columnS); 791 } 792 793 /** 794 * 将字符串 s 的所有字符都变成小写字母。 795 */ 796 public static QueryColumn lower(QueryColumn columnS) { 797 return new FunctionQueryColumn(LOWER, columnS); 798 } 799 800 /** 801 * 将字符串 s 的所有字符都变成小写字母。 802 */ 803 public static <T> QueryColumn lower(LambdaGetter<T> columnS) { 804 return new FunctionQueryColumn(LOWER, LambdaUtil.getQueryColumn(columnS)); 805 } 806 807 /** 808 * 返回字符串 s 的前 n 个字符。 809 */ 810 public static QueryColumn left(String columnS, String columnN) { 811 return new FunctionQueryColumn(LEFT, columnS, columnN); 812 } 813 814 /** 815 * 返回字符串 s 的前 n 个字符。 816 */ 817 public static QueryColumn left(QueryColumn columnS, QueryColumn columnN) { 818 return new FunctionQueryColumn(LEFT, columnS, columnN); 819 } 820 821 /** 822 * 返回字符串 s 的前 n 个字符。 823 */ 824 public static <S, N> QueryColumn left(LambdaGetter<S> columnS, LambdaGetter<N> columnN) { 825 return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN)); 826 } 827 828 /** 829 * 返回字符串 s 的前 n 个字符。 830 */ 831 public static QueryColumn left(String columnX, Integer n) { 832 return new FunctionQueryColumn(LEFT, new QueryColumn(columnX), number(n)); 833 } 834 835 /** 836 * 返回字符串 s 的前 n 个字符。 837 */ 838 public static QueryColumn left(QueryColumn columnX, Integer n) { 839 return new FunctionQueryColumn(LEFT, columnX, number(n)); 840 } 841 842 /** 843 * 返回字符串 s 的前 n 个字符。 844 */ 845 public static <T> QueryColumn left(LambdaGetter<T> columnX, Integer n) { 846 return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnX), number(n)); 847 } 848 849 /** 850 * 返回字符串 s 的后 n 个字符。 851 */ 852 public static QueryColumn right(String columnS, String columnN) { 853 return new FunctionQueryColumn(RIGHT, columnS, columnN); 854 } 855 856 /** 857 * 返回字符串 s 的后 n 个字符。 858 */ 859 public static QueryColumn right(QueryColumn columnS, QueryColumn columnN) { 860 return new FunctionQueryColumn(RIGHT, columnS, columnN); 861 } 862 863 /** 864 * 返回字符串 s 的后 n 个字符。 865 */ 866 public static <S, N> QueryColumn right(LambdaGetter<S> columnS, LambdaGetter<N> columnN) { 867 return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN)); 868 } 869 870 /** 871 * 返回字符串 s 的后 n 个字符。 872 */ 873 public static QueryColumn right(String columnX, Integer n) { 874 return new FunctionQueryColumn(RIGHT, new QueryColumn(columnX), number(n)); 875 } 876 877 /** 878 * 返回字符串 s 的后 n 个字符。 879 */ 880 public static QueryColumn right(QueryColumn columnX, Integer n) { 881 return new FunctionQueryColumn(RIGHT, columnX, number(n)); 882 } 883 884 /** 885 * 返回字符串 s 的后 n 个字符。 886 */ 887 public static <T> QueryColumn right(LambdaGetter<T> columnX, Integer n) { 888 return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnX), number(n)); 889 } 890 891 /** 892 * 字符串 s2 来填充 s1 的开始处,使字符串长度达到 len。 893 */ 894 public static QueryColumn lpad(String columnS1, String columnLen, String columnS2) { 895 return new FunctionQueryColumn(LPAD, columnS1, columnLen, columnS2); 896 } 897 898 /** 899 * 字符串 s2 来填充 s1 的开始处,使字符串长度达到 len。 900 */ 901 public static QueryColumn lpad(QueryColumn columnS1, QueryColumn columnLen, QueryColumn columnS2) { 902 return new FunctionQueryColumn(LPAD, columnS1, columnLen, columnS2); 903 } 904 905 /** 906 * 字符串 s2 来填充 s1 的开始处,使字符串长度达到 len。 907 */ 908 public static <S1, L, S2> QueryColumn lpad(LambdaGetter<S1> columnS1, LambdaGetter<L> columnLen, LambdaGetter<S2> columnS2) { 909 return new FunctionQueryColumn(LPAD, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnLen), LambdaUtil.getQueryColumn(columnS2)); 910 } 911 912 /** 913 * 字符串 s2 来填充 s1 的结尾处,使字符串长度达到 len。 914 */ 915 public static QueryColumn rpad(String columnS1, String columnLen, String columnS2) { 916 return new FunctionQueryColumn(RPAD, columnS1, columnLen, columnS2); 917 } 918 919 /** 920 * 字符串 s2 来填充 s1 的结尾处,使字符串长度达到 len。 921 */ 922 public static QueryColumn rpad(QueryColumn columnS1, QueryColumn columnLen, QueryColumn columnS2) { 923 return new FunctionQueryColumn(RPAD, columnS1, columnLen, columnS2); 924 } 925 926 /** 927 * 字符串 s2 来填充 s1 的结尾处,使字符串长度达到 len。 928 */ 929 public static <S1, L, S2> QueryColumn rpad(LambdaGetter<S1> columnS1, LambdaGetter<L> columnLen, LambdaGetter<S2> columnS2) { 930 return new FunctionQueryColumn(RPAD, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnLen), LambdaUtil.getQueryColumn(columnS2)); 931 } 932 933 /** 934 * 去掉字符串 s 开始处的空格。 935 */ 936 public static QueryColumn ltrim(String columnS) { 937 return new FunctionQueryColumn(LTRIM, columnS); 938 } 939 940 /** 941 * 去掉字符串 s 开始处的空格。 942 */ 943 public static QueryColumn ltrim(QueryColumn columnS) { 944 return new FunctionQueryColumn(LTRIM, columnS); 945 } 946 947 /** 948 * 去掉字符串 s 开始处的空格。 949 */ 950 public static <T> QueryColumn ltrim(LambdaGetter<T> columnS) { 951 return new FunctionQueryColumn(LTRIM, LambdaUtil.getQueryColumn(columnS)); 952 } 953 954 /** 955 * 去掉字符串 s 结尾处的空格。 956 */ 957 public static QueryColumn rtrim(String columnS) { 958 return new FunctionQueryColumn(RTRIM, columnS); 959 } 960 961 /** 962 * 去掉字符串 s 结尾处的空格。 963 */ 964 public static QueryColumn rtrim(QueryColumn columnS) { 965 return new FunctionQueryColumn(RTRIM, columnS); 966 } 967 968 /** 969 * 去掉字符串 s 结尾处的空格。 970 */ 971 public static <T> QueryColumn rtrim(LambdaGetter<T> columnS) { 972 return new FunctionQueryColumn(RTRIM, LambdaUtil.getQueryColumn(columnS)); 973 } 974 975 /** 976 * 去掉字符串 s 开始处和结尾处的空格。 977 */ 978 public static QueryColumn trim(QueryColumn columnS) { 979 return new FunctionQueryColumn(TRIM, columnS); 980 } 981 982 /** 983 * 将字符串 s 重复 n 次。 984 */ 985 public static QueryColumn repeat(String columnS, String columnN) { 986 return new FunctionQueryColumn(REPEAT, columnS, columnN); 987 } 988 989 /** 990 * 将字符串 s 重复 n 次。 991 */ 992 public static QueryColumn repeat(QueryColumn columnS, QueryColumn columnN) { 993 return new FunctionQueryColumn(REPEAT, columnS, columnN); 994 } 995 996 /** 997 * 将字符串 s 重复 n 次。 998 */ 999 public static <S, N> QueryColumn repeat(LambdaGetter<S> columnS, LambdaGetter<N> columnN) { 1000 return new FunctionQueryColumn(REPEAT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN)); 1001 } 1002 1003 /** 1004 * 将字符串 s 重复 n 次。 1005 */ 1006 public static QueryColumn repeat(String columnX, Integer n) { 1007 return new FunctionQueryColumn(REPEAT, new QueryColumn(columnX), number(n)); 1008 } 1009 1010 /** 1011 * 将字符串 s 重复 n 次。 1012 */ 1013 public static QueryColumn repeat(QueryColumn columnX, Integer n) { 1014 return new FunctionQueryColumn(REPEAT, columnX, number(n)); 1015 } 1016 1017 /** 1018 * 将字符串 s 重复 n 次。 1019 */ 1020 public static <T> QueryColumn repeat(LambdaGetter<T> columnX, Integer n) { 1021 return new FunctionQueryColumn(REPEAT, LambdaUtil.getQueryColumn(columnX), number(n)); 1022 } 1023 1024 /** 1025 * 返回 n 个空格。 1026 */ 1027 public static QueryColumn space(String columnN) { 1028 return new FunctionQueryColumn(SPACE, columnN); 1029 } 1030 1031 /** 1032 * 返回 n 个空格。 1033 */ 1034 public static QueryColumn space(QueryColumn columnN) { 1035 return new FunctionQueryColumn(SPACE, columnN); 1036 } 1037 1038 /** 1039 * 返回 n 个空格。 1040 */ 1041 public static <T> QueryColumn space(LambdaGetter<T> columnN) { 1042 return new FunctionQueryColumn(SPACE, LambdaUtil.getQueryColumn(columnN)); 1043 } 1044 1045 /** 1046 * 用字符串 s2 代替字符串 s 中的字符串 s1。 1047 */ 1048 public static QueryColumn replace(String columnS, String columnS1, String columnS2) { 1049 return new FunctionQueryColumn(REPLACE, columnS, columnS1, columnS2); 1050 } 1051 1052 /** 1053 * 用字符串 s2 代替字符串 s 中的字符串 s1。 1054 */ 1055 public static QueryColumn replace(QueryColumn columnS, QueryColumn columnS1, QueryColumn columnS2) { 1056 return new FunctionQueryColumn(REPLACE, columnS, columnS1, columnS2); 1057 } 1058 1059 /** 1060 * 用字符串 s2 代替字符串 s 中的字符串 s1。 1061 */ 1062 public static <S, S1, S2> QueryColumn replace(LambdaGetter<S> columnS, LambdaGetter<S1> columnS1, LambdaGetter<S2> columnS2) { 1063 return new FunctionQueryColumn(REPLACE, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnS2)); 1064 } 1065 1066 /** 1067 * 比较字符串 s1 和 s2。 1068 */ 1069 public static QueryColumn strcmp(String columnS1, String columnS2) { 1070 return new FunctionQueryColumn(STRCMP, columnS1, columnS2); 1071 } 1072 1073 /** 1074 * 比较字符串 s1 和 s2。 1075 */ 1076 public static QueryColumn strcmp(QueryColumn columnS1, QueryColumn columnS2) { 1077 return new FunctionQueryColumn(STRCMP, columnS1, columnS2); 1078 } 1079 1080 /** 1081 * 比较字符串 s1 和 s2。 1082 */ 1083 public static <S1, S2> QueryColumn strcmp(LambdaGetter<S1> columnS1, LambdaGetter<S2> columnS2) { 1084 return new FunctionQueryColumn(STRCMP, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnS2)); 1085 } 1086 1087 /** 1088 * 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串。 1089 */ 1090 public static QueryColumn substring(String columnS, String columnN, String columnLen) { 1091 return new FunctionQueryColumn(SUBSTRING, columnS, columnN, columnLen); 1092 } 1093 1094 /** 1095 * 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串。 1096 */ 1097 public static QueryColumn substring(QueryColumn columnS, QueryColumn columnN, QueryColumn columnLen) { 1098 return new FunctionQueryColumn(SUBSTRING, columnS, columnN, columnLen); 1099 } 1100 1101 /** 1102 * 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串。 1103 */ 1104 public static <S, N, L> QueryColumn substring(LambdaGetter<S> columnS, LambdaGetter<N> columnN, LambdaGetter<L> columnLen) { 1105 return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN), LambdaUtil.getQueryColumn(columnLen)); 1106 } 1107 1108 /** 1109 * 从字符串 s 中获取 s1 的开始位置。 1110 */ 1111 public static QueryColumn instr(String columnS, String columnS1) { 1112 return new FunctionQueryColumn(INSTR, columnS, columnS1); 1113 } 1114 1115 /** 1116 * 从字符串 s 中获取 s1 的开始位置。 1117 */ 1118 public static QueryColumn instr(QueryColumn columnS, QueryColumn columnS1) { 1119 return new FunctionQueryColumn(INSTR, columnS, columnS1); 1120 } 1121 1122 /** 1123 * 从字符串 s 中获取 s1 的开始位置。 1124 */ 1125 public static <S, S1> QueryColumn instr(LambdaGetter<S> columnS, LambdaGetter<S1> columnS1) { 1126 return new FunctionQueryColumn(INSTR, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnS1)); 1127 } 1128 1129 /** 1130 * 将字符串 s 的顺序反过来。 1131 */ 1132 public static QueryColumn reverse(String columnS) { 1133 return new FunctionQueryColumn(REVERSE, columnS); 1134 } 1135 1136 /** 1137 * 将字符串 s 的顺序反过来。 1138 */ 1139 public static QueryColumn reverse(QueryColumn columnS) { 1140 return new FunctionQueryColumn(REVERSE, columnS); 1141 } 1142 1143 /** 1144 * 将字符串 s 的顺序反过来。 1145 */ 1146 public static <T> QueryColumn reverse(LambdaGetter<T> columnS) { 1147 return new FunctionQueryColumn(REVERSE, LambdaUtil.getQueryColumn(columnS)); 1148 } 1149 1150 /** 1151 * 返回第 n 个字符串。 1152 */ 1153 public static QueryColumn elt(String columnN, String columnS1, String... columnSn) { 1154 return new FunctionQueryColumn(ELT, ArrayUtil.concat(new String[]{columnN, columnS1}, columnSn)); 1155 } 1156 1157 /** 1158 * 返回第 n 个字符串。 1159 */ 1160 public static QueryColumn elt(QueryColumn columnN, QueryColumn columnS1, QueryColumn... columnSn) { 1161 return new FunctionQueryColumn(ELT, ArrayUtil.concat(new QueryColumn[]{columnN, columnS1}, columnSn)); 1162 } 1163 1164 /** 1165 * 返回第一个与字符串 s 匹配的字符串的位置。 1166 */ 1167 public static QueryColumn field(String columnS, String columnS1, String... columnSn) { 1168 return new FunctionQueryColumn(FIELD, ArrayUtil.concat(new String[]{columnS, columnS1}, columnSn)); 1169 } 1170 1171 /** 1172 * 返回第一个与字符串 s 匹配的字符串的位置。 1173 */ 1174 public static QueryColumn field(QueryColumn columnS, QueryColumn columnS1, QueryColumn... columnSn) { 1175 return new FunctionQueryColumn(FIELD, ArrayUtil.concat(new QueryColumn[]{columnS, columnS1}, columnSn)); 1176 } 1177 1178 /** 1179 * 返回在字符串 s2 中与 s1 匹配的字符串的位置。 1180 */ 1181 public static QueryColumn findInSet(String columnS1, String columnS2) { 1182 return new FunctionQueryColumn(FIND_IN_SET, columnS1, columnS2); 1183 } 1184 1185 /** 1186 * 返回在字符串 s2 中与 s1 匹配的字符串的位置。 1187 */ 1188 public static QueryColumn findInSet(QueryColumn columnS1, QueryColumn columnS2) { 1189 return new FunctionQueryColumn(FIND_IN_SET, columnS1, columnS2); 1190 } 1191 1192 /** 1193 * 返回在字符串 s2 中与 s1 匹配的字符串的位置。 1194 */ 1195 public static <S1, S2> QueryColumn findInSet(LambdaGetter<S1> columnS1, LambdaGetter<S2> columnS2) { 1196 return new FunctionQueryColumn(FIND_IN_SET, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnS2)); 1197 } 1198 1199 // === 日期时间函数 === 1200 1201 /** 1202 * 返回当前日期。 1203 */ 1204 public static QueryColumn curDate() { 1205 return new FunctionQueryColumn(CURDATE); 1206 } 1207 1208 /** 1209 * 返回当前日期。 1210 */ 1211 public static QueryColumn currentDate() { 1212 return new FunctionQueryColumn(CURRENT_DATE); 1213 } 1214 1215 /** 1216 * 返回当前时间。 1217 */ 1218 public static QueryColumn curTime() { 1219 return new FunctionQueryColumn(CURTIME); 1220 } 1221 1222 /** 1223 * 返回当前时间。 1224 */ 1225 public static QueryColumn currentTime() { 1226 return new FunctionQueryColumn(CURRENT_TIME); 1227 } 1228 1229 /** 1230 * 返回当前日期和时间。 1231 */ 1232 public static QueryColumn now() { 1233 return new FunctionQueryColumn(NOW); 1234 } 1235 1236 /** 1237 * 返回当前日期和时间。 1238 */ 1239 public static QueryColumn currentTimestamp() { 1240 return new FunctionQueryColumn(CURRENT_TIMESTAMP); 1241 } 1242 1243 /** 1244 * 返回当前日期和时间。 1245 */ 1246 public static QueryColumn localTime() { 1247 return new FunctionQueryColumn(LOCALTIME); 1248 } 1249 1250 /** 1251 * 返回当前日期和时间。 1252 */ 1253 public static QueryColumn sysDate() { 1254 return new FunctionQueryColumn(SYSDATE); 1255 } 1256 1257 1258 /** 1259 * 返回当前日期和时间。 1260 */ 1261 public static QueryColumn localTimestamp() { 1262 return new FunctionQueryColumn(LOCALTIMESTAMP); 1263 } 1264 1265 /** 1266 * 以 UNIX 时间戳的形式返回当前时间。 1267 */ 1268 public static QueryColumn unixTimestamp() { 1269 return new FunctionQueryColumn(UNIX_TIMESTAMP); 1270 } 1271 1272 /** 1273 * 将时间 d 以 UNIX 时间戳的形式返回。 1274 */ 1275 public static QueryColumn unixTimestamp(String columnD) { 1276 return new FunctionQueryColumn(UNIX_TIMESTAMP, columnD); 1277 } 1278 1279 /** 1280 * 将时间 d 以 UNIX 时间戳的形式返回。 1281 */ 1282 public static QueryColumn unixTimestamp(QueryColumn columnD) { 1283 return new FunctionQueryColumn(UNIX_TIMESTAMP, columnD); 1284 } 1285 1286 /** 1287 * 将时间 d 以 UNIX 时间戳的形式返回。 1288 */ 1289 public static <T> QueryColumn unixTimestamp(LambdaGetter<T> columnD) { 1290 return new FunctionQueryColumn(UNIX_TIMESTAMP, LambdaUtil.getQueryColumn(columnD)); 1291 } 1292 1293 /** 1294 * 把 UNIX 时间戳的时间转换为普通格式的时间。 1295 */ 1296 public static QueryColumn fromUnixTime(String columnD) { 1297 return new FunctionQueryColumn(FROM_UNIXTIME, columnD); 1298 } 1299 1300 /** 1301 * 把 UNIX 时间戳的时间转换为普通格式的时间。 1302 */ 1303 public static QueryColumn fromUnixTime(QueryColumn columnD) { 1304 return new FunctionQueryColumn(FROM_UNIXTIME, columnD); 1305 } 1306 1307 /** 1308 * 把 UNIX 时间戳的时间转换为普通格式的时间。 1309 */ 1310 public static <T> QueryColumn fromUnixTime(LambdaGetter<T> columnD) { 1311 return new FunctionQueryColumn(FROM_UNIXTIME, LambdaUtil.getQueryColumn(columnD)); 1312 } 1313 1314 /** 1315 * 返回 UTC(国际协调时间)日期。 1316 */ 1317 public static QueryColumn utcDate() { 1318 return new FunctionQueryColumn(UTC_DATE); 1319 } 1320 1321 /** 1322 * 返回 UTC 时间。 1323 */ 1324 public static QueryColumn utcTime() { 1325 return new FunctionQueryColumn(UTC_TIME); 1326 } 1327 1328 /** 1329 * 返回日期 d 中的月份值,范围是 1~12。 1330 */ 1331 public static QueryColumn month(String columnD) { 1332 return new FunctionQueryColumn(MONTH, columnD); 1333 } 1334 1335 /** 1336 * 返回日期 d 中的月份值,范围是 1~12。 1337 */ 1338 public static QueryColumn month(QueryColumn columnD) { 1339 return new FunctionQueryColumn(MONTH, columnD); 1340 } 1341 1342 /** 1343 * 返回日期 d 中的月份值,范围是 1~12。 1344 */ 1345 public static <T> QueryColumn month(LambdaGetter<T> columnD) { 1346 return new FunctionQueryColumn(MONTH, LambdaUtil.getQueryColumn(columnD)); 1347 } 1348 1349 /** 1350 * 返回日期 d 中的月份名称,如 january。 1351 */ 1352 public static QueryColumn monthName(String columnD) { 1353 return new FunctionQueryColumn(MONTHNAME, columnD); 1354 } 1355 1356 /** 1357 * 返回日期 d 中的月份名称,如 january。 1358 */ 1359 public static QueryColumn monthName(QueryColumn columnD) { 1360 return new FunctionQueryColumn(MONTHNAME, columnD); 1361 } 1362 1363 /** 1364 * 返回日期 d 中的月份名称,如 january。 1365 */ 1366 public static <T> QueryColumn monthName(LambdaGetter<T> columnD) { 1367 return new FunctionQueryColumn(MONTHNAME, LambdaUtil.getQueryColumn(columnD)); 1368 } 1369 1370 /** 1371 * 返回日期 d 是星期几,如 Monday。 1372 */ 1373 public static QueryColumn dayName(String columnD) { 1374 return new FunctionQueryColumn(DAYNAME, columnD); 1375 } 1376 1377 /** 1378 * 返回日期 d 是星期几,如 Monday。 1379 */ 1380 public static QueryColumn dayName(QueryColumn columnD) { 1381 return new FunctionQueryColumn(DAYNAME, columnD); 1382 } 1383 1384 /** 1385 * 返回日期 d 是星期几,如 Monday。 1386 */ 1387 public static <T> QueryColumn dayName(LambdaGetter<T> columnD) { 1388 return new FunctionQueryColumn(DAYNAME, LambdaUtil.getQueryColumn(columnD)); 1389 } 1390 1391 /** 1392 * 返回日期 d 是星期几,1 表示星期日,2 表示星期二。 1393 */ 1394 public static QueryColumn dayOfWeek(String columnD) { 1395 return new FunctionQueryColumn(DAYOFWEEK, columnD); 1396 } 1397 1398 /** 1399 * 返回日期 d 是星期几,1 表示星期日,2 表示星期二。 1400 */ 1401 public static QueryColumn dayOfWeek(QueryColumn columnD) { 1402 return new FunctionQueryColumn(DAYOFWEEK, columnD); 1403 } 1404 1405 /** 1406 * 返回日期 d 是星期几,1 表示星期日,2 表示星期二。 1407 */ 1408 public static <T> QueryColumn dayOfWeek(LambdaGetter<T> columnD) { 1409 return new FunctionQueryColumn(DAYOFWEEK, LambdaUtil.getQueryColumn(columnD)); 1410 } 1411 1412 /** 1413 * 返回日期 d 是星期几,0 表示星期一,1 表示星期二。 1414 */ 1415 public static QueryColumn weekday(String columnD) { 1416 return new FunctionQueryColumn(WEEKDAY, columnD); 1417 } 1418 1419 /** 1420 * 返回日期 d 是星期几,0 表示星期一,1 表示星期二。 1421 */ 1422 public static QueryColumn weekday(QueryColumn columnD) { 1423 return new FunctionQueryColumn(WEEKDAY, columnD); 1424 } 1425 1426 /** 1427 * 返回日期 d 是星期几,0 表示星期一,1 表示星期二。 1428 */ 1429 public static <T> QueryColumn weekday(LambdaGetter<T> columnD) { 1430 return new FunctionQueryColumn(WEEKDAY, LambdaUtil.getQueryColumn(columnD)); 1431 } 1432 1433 /** 1434 * 计算日期 d 是本年的第几个星期,范围是 0-53。 1435 */ 1436 public static QueryColumn week(String columnD) { 1437 return new FunctionQueryColumn(WEEK, columnD); 1438 } 1439 1440 /** 1441 * 计算日期 d 是本年的第几个星期,范围是 0-53。 1442 */ 1443 public static QueryColumn week(QueryColumn columnD) { 1444 return new FunctionQueryColumn(WEEK, columnD); 1445 } 1446 1447 /** 1448 * 计算日期 d 是本年的第几个星期,范围是 0-53。 1449 */ 1450 public static <T> QueryColumn week(LambdaGetter<T> columnD) { 1451 return new FunctionQueryColumn(WEEK, LambdaUtil.getQueryColumn(columnD)); 1452 } 1453 1454 /** 1455 * 计算日期 d 是本年的第几个星期,范围是 1-53。 1456 */ 1457 public static QueryColumn weekOfYear(String columnD) { 1458 return new FunctionQueryColumn(WEEKOFYEAR, columnD); 1459 } 1460 1461 /** 1462 * 计算日期 d 是本年的第几个星期,范围是 1-53。 1463 */ 1464 public static QueryColumn weekOfYear(QueryColumn columnD) { 1465 return new FunctionQueryColumn(WEEKOFYEAR, columnD); 1466 } 1467 1468 /** 1469 * 计算日期 d 是本年的第几个星期,范围是 1-53。 1470 */ 1471 public static <T> QueryColumn weekOfYear(LambdaGetter<T> columnD) { 1472 return new FunctionQueryColumn(WEEKOFYEAR, LambdaUtil.getQueryColumn(columnD)); 1473 } 1474 1475 /** 1476 * 计算日期 d 是本年的第几天。 1477 */ 1478 public static QueryColumn dayOfYear(String columnD) { 1479 return new FunctionQueryColumn(DAYOFYEAR, columnD); 1480 } 1481 1482 /** 1483 * 计算日期 d 是本年的第几天。 1484 */ 1485 public static QueryColumn dayOfYear(QueryColumn columnD) { 1486 return new FunctionQueryColumn(DAYOFYEAR, columnD); 1487 } 1488 1489 /** 1490 * 计算日期 d 是本年的第几天。 1491 */ 1492 public static <T> QueryColumn dayOfYear(LambdaGetter<T> columnD) { 1493 return new FunctionQueryColumn(DAYOFYEAR, LambdaUtil.getQueryColumn(columnD)); 1494 } 1495 1496 /** 1497 * 计算日期 d 是本月的第几天。 1498 */ 1499 public static QueryColumn dayOfMonth(String columnD) { 1500 return new FunctionQueryColumn(DAYOFMONTH, columnD); 1501 } 1502 1503 /** 1504 * 计算日期 d 是本月的第几天。 1505 */ 1506 public static QueryColumn dayOfMonth(QueryColumn columnD) { 1507 return new FunctionQueryColumn(DAYOFMONTH, columnD); 1508 } 1509 1510 /** 1511 * 计算日期 d 是本月的第几天。 1512 */ 1513 public static <T> QueryColumn dayOfMonth(LambdaGetter<T> columnD) { 1514 return new FunctionQueryColumn(DAYOFMONTH, LambdaUtil.getQueryColumn(columnD)); 1515 } 1516 1517 /** 1518 * 返回日期 d 中的年份值。 1519 */ 1520 public static QueryColumn year(String columnD) { 1521 return new FunctionQueryColumn(YEAR, columnD); 1522 } 1523 1524 /** 1525 * 返回日期 d 中的年份值。 1526 */ 1527 public static QueryColumn year(QueryColumn columnD) { 1528 return new FunctionQueryColumn(YEAR, columnD); 1529 } 1530 1531 /** 1532 * 返回日期 d 中的年份值。 1533 */ 1534 public static <T> QueryColumn year(LambdaGetter<T> columnD) { 1535 return new FunctionQueryColumn(YEAR, LambdaUtil.getQueryColumn(columnD)); 1536 } 1537 1538 /** 1539 * 返回日期 d 中的天数值。 1540 */ 1541 public static FunctionQueryColumn day(String columnD) { 1542 return new FunctionQueryColumn(DAY, columnD); 1543 } 1544 1545 /** 1546 * 返回日期 d 中的天数值。 1547 */ 1548 public static FunctionQueryColumn day(QueryColumn columnD) { 1549 return new FunctionQueryColumn(DAY, columnD); 1550 } 1551 1552 /** 1553 * 返回日期 d 中的天数值。 1554 */ 1555 public static <T> FunctionQueryColumn day(LambdaGetter<T> columnD) { 1556 return new FunctionQueryColumn(DAY, LambdaUtil.getQueryColumn(columnD)); 1557 } 1558 1559 /** 1560 * 返回日期 d 是第几季度,范围 1-4。 1561 */ 1562 public static QueryColumn quarter(String columnD) { 1563 return new FunctionQueryColumn(QUARTER, columnD); 1564 } 1565 1566 /** 1567 * 返回日期 d 是第几季度,范围 1-4。 1568 */ 1569 public static QueryColumn quarter(QueryColumn columnD) { 1570 return new FunctionQueryColumn(QUARTER, columnD); 1571 } 1572 1573 /** 1574 * 返回日期 d 是第几季度,范围 1-4。 1575 */ 1576 public static <T> QueryColumn quarter(LambdaGetter<T> columnD) { 1577 return new FunctionQueryColumn(QUARTER, LambdaUtil.getQueryColumn(columnD)); 1578 } 1579 1580 /** 1581 * 返回时间 t 中的小时值。 1582 */ 1583 public static QueryColumn hour(String columnT) { 1584 return new FunctionQueryColumn(HOUR, columnT); 1585 } 1586 1587 /** 1588 * 返回时间 t 中的小时值。 1589 */ 1590 public static QueryColumn hour(QueryColumn columnT) { 1591 return new FunctionQueryColumn(HOUR, columnT); 1592 } 1593 1594 /** 1595 * 返回时间 t 中的小时值。 1596 */ 1597 public static <T> QueryColumn hour(LambdaGetter<T> columnT) { 1598 return new FunctionQueryColumn(HOUR, LambdaUtil.getQueryColumn(columnT)); 1599 } 1600 1601 /** 1602 * 返回时间 t 中的分钟值。 1603 */ 1604 public static QueryColumn minute(String columnT) { 1605 return new FunctionQueryColumn(MINUTE, columnT); 1606 } 1607 1608 /** 1609 * 返回时间 t 中的分钟值。 1610 */ 1611 public static QueryColumn minute(QueryColumn columnT) { 1612 return new FunctionQueryColumn(MINUTE, columnT); 1613 } 1614 1615 /** 1616 * 返回时间 t 中的分钟值。 1617 */ 1618 public static <T> QueryColumn minute(LambdaGetter<T> columnT) { 1619 return new FunctionQueryColumn(MINUTE, LambdaUtil.getQueryColumn(columnT)); 1620 } 1621 1622 /** 1623 * 返回时间 t 中的秒钟值。 1624 */ 1625 public static QueryColumn second(String columnT) { 1626 return new FunctionQueryColumn(SECOND, columnT); 1627 } 1628 1629 /** 1630 * 返回时间 t 中的秒钟值。 1631 */ 1632 public static QueryColumn second(QueryColumn columnT) { 1633 return new FunctionQueryColumn(SECOND, columnT); 1634 } 1635 1636 /** 1637 * 返回时间 t 中的秒钟值。 1638 */ 1639 public static <T> QueryColumn second(LambdaGetter<T> columnT) { 1640 return new FunctionQueryColumn(SECOND, LambdaUtil.getQueryColumn(columnT)); 1641 } 1642 1643 /** 1644 * 将时间 t 转换为秒。 1645 */ 1646 public static QueryColumn timeToSec(String columnT) { 1647 return new FunctionQueryColumn(TIME_TO_SEC, columnT); 1648 } 1649 1650 /** 1651 * 将时间 t 转换为秒。 1652 */ 1653 public static QueryColumn timeToSec(QueryColumn columnT) { 1654 return new FunctionQueryColumn(TIME_TO_SEC, columnT); 1655 } 1656 1657 /** 1658 * 将时间 t 转换为秒。 1659 */ 1660 public static <T> QueryColumn timeToSec(LambdaGetter<T> columnT) { 1661 return new FunctionQueryColumn(TIME_TO_SEC, LambdaUtil.getQueryColumn(columnT)); 1662 } 1663 1664 /** 1665 * 将以秒为单位的时间 s 转换为时分秒的格式。 1666 */ 1667 public static QueryColumn secToTime(String columnS) { 1668 return new FunctionQueryColumn(SEC_TO_TIME, columnS); 1669 } 1670 1671 /** 1672 * 将以秒为单位的时间 s 转换为时分秒的格式。 1673 */ 1674 public static QueryColumn secToTime(QueryColumn columnS) { 1675 return new FunctionQueryColumn(SEC_TO_TIME, columnS); 1676 } 1677 1678 /** 1679 * 将以秒为单位的时间 s 转换为时分秒的格式。 1680 */ 1681 public static <T> QueryColumn secToTime(LambdaGetter<T> columnS) { 1682 return new FunctionQueryColumn(SEC_TO_TIME, LambdaUtil.getQueryColumn(columnS)); 1683 } 1684 1685 /** 1686 * 计算日期 d 到 0000 年 1 月 1 日的天数。 1687 */ 1688 public static QueryColumn toDays(String columnD) { 1689 return new FunctionQueryColumn(TO_DAYS, columnD); 1690 } 1691 1692 /** 1693 * 计算日期 d 到 0000 年 1 月 1 日的天数。 1694 */ 1695 public static QueryColumn toDays(QueryColumn columnD) { 1696 return new FunctionQueryColumn(TO_DAYS, columnD); 1697 } 1698 1699 /** 1700 * 计算日期 d 到 0000 年 1 月 1 日的天数。 1701 */ 1702 public static <T> QueryColumn toDays(LambdaGetter<T> columnD) { 1703 return new FunctionQueryColumn(TO_DAYS, LambdaUtil.getQueryColumn(columnD)); 1704 } 1705 1706 /** 1707 * 计算从 0000 年 1 月 1 日开始 n 天后的日期。 1708 */ 1709 public static QueryColumn fromDays(String columnD) { 1710 return new FunctionQueryColumn(FROM_DAYS, columnD); 1711 } 1712 1713 /** 1714 * 计算从 0000 年 1 月 1 日开始 n 天后的日期。 1715 */ 1716 public static QueryColumn fromDays(QueryColumn columnD) { 1717 return new FunctionQueryColumn(FROM_DAYS, columnD); 1718 } 1719 1720 /** 1721 * 计算从 0000 年 1 月 1 日开始 n 天后的日期。 1722 */ 1723 public static <T> QueryColumn fromDays(LambdaGetter<T> columnD) { 1724 return new FunctionQueryColumn(FROM_DAYS, LambdaUtil.getQueryColumn(columnD)); 1725 } 1726 1727 /** 1728 * 计算日期 d1 到 d2 之间相隔的天数。 1729 */ 1730 public static QueryColumn dateDiff(String columnD1, String columnD2) { 1731 return new FunctionQueryColumn(DATEDIFF, columnD1, columnD2); 1732 } 1733 1734 /** 1735 * 计算日期 d1 到 d2 之间相隔的天数。 1736 */ 1737 public static QueryColumn dateDiff(QueryColumn columnD1, QueryColumn columnD2) { 1738 return new FunctionQueryColumn(DATEDIFF, columnD1, columnD2); 1739 } 1740 1741 /** 1742 * 计算日期 d1 到 d2 之间相隔的天数。 1743 */ 1744 public static <D1, D2> QueryColumn dateDiff(LambdaGetter<D1> columnD1, LambdaGetter<D2> columnD2) { 1745 return new FunctionQueryColumn(DATEDIFF, LambdaUtil.getQueryColumn(columnD1), LambdaUtil.getQueryColumn(columnD2)); 1746 } 1747 1748 /** 1749 * 计算开始日期 d 加上 n 天的日期。 1750 */ 1751 public static QueryColumn addDate(String columnD, String columnN) { 1752 return new FunctionQueryColumn(ADDDATE, columnD, columnN); 1753 } 1754 1755 /** 1756 * 计算开始日期 d 加上 n 天的日期。 1757 */ 1758 public static QueryColumn addDate(QueryColumn columnD, QueryColumn columnN) { 1759 return new FunctionQueryColumn(ADDDATE, columnD, columnN); 1760 } 1761 1762 /** 1763 * 计算开始日期 d 加上 n 天的日期。 1764 */ 1765 public static <D, N> QueryColumn addDate(LambdaGetter<D> columnD, LambdaGetter<N> columnN) { 1766 return new FunctionQueryColumn(ADDDATE, LambdaUtil.getQueryColumn(columnD), LambdaUtil.getQueryColumn(columnN)); 1767 } 1768 1769 /** 1770 * 计算起始日期 d 减去 n 天的日期。 1771 */ 1772 public static QueryColumn subDate(String columnD, String columnN) { 1773 return new FunctionQueryColumn(SUBDATE, columnD, columnN); 1774 } 1775 1776 /** 1777 * 计算起始日期 d 减去 n 天的日期。 1778 */ 1779 public static QueryColumn subDate(QueryColumn columnD, QueryColumn columnN) { 1780 return new FunctionQueryColumn(SUBDATE, columnD, columnN); 1781 } 1782 1783 /** 1784 * 计算起始日期 d 减去 n 天的日期。 1785 */ 1786 public static <D, N> QueryColumn subDate(LambdaGetter<D> columnD, LambdaGetter<N> columnN) { 1787 return new FunctionQueryColumn(SUBDATE, LambdaUtil.getQueryColumn(columnD), LambdaUtil.getQueryColumn(columnN)); 1788 } 1789 1790 /** 1791 * 计算起始时间 t 加上 n 秒的时间。 1792 */ 1793 public static QueryColumn addTime(String columnT, String columnN) { 1794 return new FunctionQueryColumn(ADDTIME, columnT, columnN); 1795 } 1796 1797 /** 1798 * 计算起始时间 t 加上 n 秒的时间。 1799 */ 1800 public static QueryColumn addTime(QueryColumn columnT, QueryColumn columnN) { 1801 return new FunctionQueryColumn(ADDTIME, columnT, columnN); 1802 } 1803 1804 /** 1805 * 计算起始时间 t 加上 n 秒的时间。 1806 */ 1807 public static <T, N> QueryColumn addTime(LambdaGetter<T> columnT, LambdaGetter<N> columnN) { 1808 return new FunctionQueryColumn(ADDTIME, LambdaUtil.getQueryColumn(columnT), LambdaUtil.getQueryColumn(columnN)); 1809 } 1810 1811 /** 1812 * 计算起始时间 t 减去 n 秒的时间。 1813 */ 1814 public static QueryColumn subTime(String columnT, String columnN) { 1815 return new FunctionQueryColumn(SUBTIME, columnT, columnN); 1816 } 1817 1818 /** 1819 * 计算起始时间 t 减去 n 秒的时间。 1820 */ 1821 public static QueryColumn subTime(QueryColumn columnT, QueryColumn columnN) { 1822 return new FunctionQueryColumn(SUBTIME, columnT, columnN); 1823 } 1824 1825 /** 1826 * 计算起始时间 t 减去 n 秒的时间。 1827 */ 1828 public static <T, N> QueryColumn subTime(LambdaGetter<T> columnT, LambdaGetter<N> columnN) { 1829 return new FunctionQueryColumn(SUBTIME, LambdaUtil.getQueryColumn(columnT), LambdaUtil.getQueryColumn(columnN)); 1830 } 1831 1832 /** 1833 * 按照表达式 f 的要求显示日期 d。 1834 */ 1835 public static QueryColumn dateFormat(String columnD, String columnF) { 1836 return new FunctionQueryColumn(DATE_FORMAT, columnD, columnF); 1837 } 1838 1839 /** 1840 * 按照表达式 f 的要求显示日期 d。 1841 */ 1842 public static QueryColumn dateFormat(QueryColumn columnD, QueryColumn columnF) { 1843 return new FunctionQueryColumn(DATE_FORMAT, columnD, columnF); 1844 } 1845 1846 /** 1847 * 按照表达式 f 的要求显示日期 d。 1848 */ 1849 public static <D, F> QueryColumn dateFormat(LambdaGetter<D> columnD, LambdaGetter<F> columnF) { 1850 return new FunctionQueryColumn(DATE_FORMAT, LambdaUtil.getQueryColumn(columnD), LambdaUtil.getQueryColumn(columnF)); 1851 } 1852 1853 /** 1854 * 按照表达式 f 的要求显示时间 t。 1855 */ 1856 public static QueryColumn timeFormat(String columnT, String columnF) { 1857 return new FunctionQueryColumn(TIME_FORMAT, columnT, columnF); 1858 } 1859 1860 /** 1861 * 按照表达式 f 的要求显示时间 t。 1862 */ 1863 public static QueryColumn timeFormat(QueryColumn columnT, QueryColumn columnF) { 1864 return new FunctionQueryColumn(TIME_FORMAT, columnT, columnF); 1865 } 1866 1867 /** 1868 * 按照表达式 f 的要求显示时间 t。 1869 */ 1870 public static <T, F> QueryColumn timeFormat(LambdaGetter<T> columnT, LambdaGetter<F> columnF) { 1871 return new FunctionQueryColumn(TIME_FORMAT, LambdaUtil.getQueryColumn(columnT), LambdaUtil.getQueryColumn(columnF)); 1872 } 1873 1874 /** 1875 * 根据字符串 s 获取 type 类型数据的显示格式。 1876 */ 1877 public static QueryColumn getFormat(String columnType, String columnS) { 1878 return new FunctionQueryColumn(GET_FORMAT, columnType, columnS); 1879 } 1880 1881 /** 1882 * 根据字符串 s 获取 type 类型数据的显示格式。 1883 */ 1884 public static QueryColumn getFormat(QueryColumn columnType, QueryColumn columnS) { 1885 return new FunctionQueryColumn(GET_FORMAT, columnType, columnS); 1886 } 1887 1888 /** 1889 * 根据字符串 s 获取 type 类型数据的显示格式。 1890 */ 1891 public static <T, S> QueryColumn getFormat(LambdaGetter<T> columnType, LambdaGetter<S> columnS) { 1892 return new FunctionQueryColumn(GET_FORMAT, LambdaUtil.getQueryColumn(columnType), LambdaUtil.getQueryColumn(columnS)); 1893 } 1894 1895 // === 系统信息函数 === 1896 1897 /** 1898 * 返回数据库的版本号。 1899 */ 1900 public static QueryColumn version() { 1901 return new FunctionQueryColumn(VERSION); 1902 } 1903 1904 /** 1905 * 返回服务器的连接数。 1906 */ 1907 public static QueryColumn connectionId() { 1908 return new FunctionQueryColumn(CONNECTION_ID); 1909 } 1910 1911 /** 1912 * 返回当前数据库名。 1913 */ 1914 public static QueryColumn database() { 1915 return new FunctionQueryColumn(DATABASE); 1916 } 1917 1918 /** 1919 * 返回当前数据库 schema。 1920 */ 1921 public static QueryColumn schema() { 1922 return new FunctionQueryColumn(SCHEMA); 1923 } 1924 1925 /** 1926 * 返回当前用户的名称。 1927 */ 1928 public static QueryColumn user() { 1929 return new FunctionQueryColumn(USER); 1930 } 1931 1932 /** 1933 * 返回字符串 str 的字符集。 1934 */ 1935 public static QueryColumn charset(String columnStr) { 1936 return new FunctionQueryColumn(CHARSET, columnStr); 1937 } 1938 1939 /** 1940 * 返回字符串 str 的字符集。 1941 */ 1942 public static QueryColumn charset(QueryColumn columnStr) { 1943 return new FunctionQueryColumn(CHARSET, columnStr); 1944 } 1945 1946 /** 1947 * 返回字符串 str 的字符集。 1948 */ 1949 public static <T> QueryColumn charset(LambdaGetter<T> columnStr) { 1950 return new FunctionQueryColumn(CHARSET, LambdaUtil.getQueryColumn(columnStr)); 1951 } 1952 1953 /** 1954 * 返回字符串 str 的字符排列方式。 1955 */ 1956 public static QueryColumn collation(String columnStr) { 1957 return new FunctionQueryColumn(COLLATION, columnStr); 1958 } 1959 1960 /** 1961 * 返回字符串 str 的字符排列方式。 1962 */ 1963 public static QueryColumn collation(QueryColumn columnStr) { 1964 return new FunctionQueryColumn(COLLATION, columnStr); 1965 } 1966 1967 /** 1968 * 返回字符串 str 的字符排列方式。 1969 */ 1970 public static <T> QueryColumn collation(LambdaGetter<T> columnStr) { 1971 return new FunctionQueryColumn(COLLATION, LambdaUtil.getQueryColumn(columnStr)); 1972 } 1973 1974 /** 1975 * 返回最后生成的 auto_increment 值。 1976 */ 1977 public static QueryColumn lastInsertId() { 1978 return new FunctionQueryColumn(LAST_INSERT_ID); 1979 } 1980 1981 // === 加密函数 === 1982 1983 /** 1984 * 对字符串 str 进行加密。 1985 */ 1986 public static QueryColumn password(String columnStr) { 1987 return new FunctionQueryColumn(PASSWORD, columnStr); 1988 } 1989 1990 /** 1991 * 对字符串 str 进行加密。 1992 */ 1993 public static QueryColumn password(QueryColumn columnStr) { 1994 return new FunctionQueryColumn(PASSWORD, columnStr); 1995 } 1996 1997 /** 1998 * 对字符串 str 进行加密。 1999 */ 2000 public static <T> QueryColumn password(LambdaGetter<T> columnStr) { 2001 return new FunctionQueryColumn(PASSWORD, LambdaUtil.getQueryColumn(columnStr)); 2002 } 2003 2004 /** 2005 * 对字符串 str 进行加密。 2006 */ 2007 public static QueryColumn md5(String columnStr) { 2008 return new FunctionQueryColumn(MD5, columnStr); 2009 } 2010 2011 /** 2012 * 对字符串 str 进行加密。 2013 */ 2014 public static QueryColumn md5(QueryColumn columnStr) { 2015 return new FunctionQueryColumn(MD5, columnStr); 2016 } 2017 2018 /** 2019 * 对字符串 str 进行加密。 2020 */ 2021 public static <T> QueryColumn md5(LambdaGetter<T> columnStr) { 2022 return new FunctionQueryColumn(MD5, LambdaUtil.getQueryColumn(columnStr)); 2023 } 2024 2025 /** 2026 * 使用字符串 pswd_str 来加密字符串 str,加密结果是一个二进制数,必须使用 BLOB 类型来保持它。 2027 */ 2028 public static QueryColumn encode(String columnStr, String columnPswdStr) { 2029 return new FunctionQueryColumn(ENCODE, columnStr, columnPswdStr); 2030 } 2031 2032 /** 2033 * 使用字符串 pswd_str 来加密字符串 str,加密结果是一个二进制数,必须使用 BLOB 类型来保持它。 2034 */ 2035 public static QueryColumn encode(QueryColumn columnStr, QueryColumn columnPswdStr) { 2036 return new FunctionQueryColumn(ENCODE, columnStr, columnPswdStr); 2037 } 2038 2039 /** 2040 * 使用字符串 pswd_str 来加密字符串 str,加密结果是一个二进制数,必须使用 BLOB 类型来保持它。 2041 */ 2042 public static <S, P> QueryColumn encode(LambdaGetter<S> columnStr, LambdaGetter<P> columnPswdStr) { 2043 return new FunctionQueryColumn(ENCODE, LambdaUtil.getQueryColumn(columnStr), LambdaUtil.getQueryColumn(columnPswdStr)); 2044 } 2045 2046 /** 2047 * 解密函数,使用字符串 pswd_str 来为 crypt_str 解密。 2048 */ 2049 public static QueryColumn decode(String columnCryptStr, String columnPswdStr) { 2050 return new FunctionQueryColumn(DECODE, columnCryptStr, columnPswdStr); 2051 } 2052 2053 /** 2054 * 解密函数,使用字符串 pswd_str 来为 crypt_str 解密。 2055 */ 2056 public static QueryColumn decode(QueryColumn columnCryptStr, QueryColumn columnPswdStr) { 2057 return new FunctionQueryColumn(DECODE, columnCryptStr, columnPswdStr); 2058 } 2059 2060 /** 2061 * 解密函数,使用字符串 pswd_str 来为 crypt_str 解密。 2062 */ 2063 public static <C, P> QueryColumn decode(LambdaGetter<C> columnCryptStr, LambdaGetter<P> columnPswdStr) { 2064 return new FunctionQueryColumn(DECODE, LambdaUtil.getQueryColumn(columnCryptStr), LambdaUtil.getQueryColumn(columnPswdStr)); 2065 } 2066 2067 // === 其他函数 === 2068 2069 /** 2070 * 格式化函数,可以将数字 x 进行格式化,将 x 保留到小数点后 n 位,这个过程需要进行四舍五入。 2071 */ 2072 public static QueryColumn format(String columnX, String columnN) { 2073 return new FunctionQueryColumn(FORMAT, columnX, columnN); 2074 } 2075 2076 /** 2077 * 格式化函数,可以将数字 x 进行格式化,将 x 保留到小数点后 n 位,这个过程需要进行四舍五入。 2078 */ 2079 public static QueryColumn format(QueryColumn columnX, QueryColumn columnN) { 2080 return new FunctionQueryColumn(FORMAT, columnX, columnN); 2081 } 2082 2083 /** 2084 * 格式化函数,可以将数字 x 进行格式化,将 x 保留到小数点后 n 位,这个过程需要进行四舍五入。 2085 */ 2086 public static <X, N> QueryColumn format(LambdaGetter<X> columnX, LambdaGetter<N> columnN) { 2087 return new FunctionQueryColumn(FORMAT, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnN)); 2088 } 2089 2090 /** 2091 * 返回字符串 s 的第一个字符的 ASSCII 码。 2092 */ 2093 public static QueryColumn ascii(String columnS) { 2094 return new FunctionQueryColumn(ASCII, columnS); 2095 } 2096 2097 /** 2098 * 返回字符串 s 的第一个字符的 ASSCII 码。 2099 */ 2100 public static QueryColumn ascii(QueryColumn columnS) { 2101 return new FunctionQueryColumn(ASCII, columnS); 2102 } 2103 2104 /** 2105 * 返回字符串 s 的第一个字符的 ASSCII 码。 2106 */ 2107 public static <T> QueryColumn ascii(LambdaGetter<T> columnS) { 2108 return new FunctionQueryColumn(ASCII, LambdaUtil.getQueryColumn(columnS)); 2109 } 2110 2111 /** 2112 * 返回 x 的二进制编码。 2113 */ 2114 public static QueryColumn bin(String columnX) { 2115 return new FunctionQueryColumn(BIN, columnX); 2116 } 2117 2118 /** 2119 * 返回 x 的二进制编码。 2120 */ 2121 public static QueryColumn bin(QueryColumn columnX) { 2122 return new FunctionQueryColumn(BIN, columnX); 2123 } 2124 2125 /** 2126 * 返回 x 的二进制编码。 2127 */ 2128 public static <T> QueryColumn bin(LambdaGetter<T> columnX) { 2129 return new FunctionQueryColumn(BIN, LambdaUtil.getQueryColumn(columnX)); 2130 } 2131 2132 /** 2133 * 返回 x 的十六进制编码。 2134 */ 2135 public static QueryColumn hex(String columnX) { 2136 return new FunctionQueryColumn(HEX, columnX); 2137 } 2138 2139 /** 2140 * 返回 x 的十六进制编码。 2141 */ 2142 public static QueryColumn hex(QueryColumn columnX) { 2143 return new FunctionQueryColumn(HEX, columnX); 2144 } 2145 2146 /** 2147 * 返回 x 的十六进制编码。 2148 */ 2149 public static <T> QueryColumn hex(LambdaGetter<T> columnX) { 2150 return new FunctionQueryColumn(HEX, LambdaUtil.getQueryColumn(columnX)); 2151 } 2152 2153 /** 2154 * 返回 x 的八进制编码。 2155 */ 2156 public static QueryColumn oct(String columnX) { 2157 return new FunctionQueryColumn(OCT, columnX); 2158 } 2159 2160 /** 2161 * 返回 x 的八进制编码。 2162 */ 2163 public static QueryColumn oct(QueryColumn columnX) { 2164 return new FunctionQueryColumn(OCT, columnX); 2165 } 2166 2167 /** 2168 * 返回 x 的八进制编码。 2169 */ 2170 public static <T> QueryColumn oct(LambdaGetter<T> columnX) { 2171 return new FunctionQueryColumn(OCT, LambdaUtil.getQueryColumn(columnX)); 2172 } 2173 2174 /** 2175 * 将 x 从 f1 进制数变成 f2 进制数。 2176 */ 2177 public static QueryColumn conv(String columnX, String columnF1, String columnF2) { 2178 return new FunctionQueryColumn(CONV, columnX, columnF1, columnF2); 2179 } 2180 2181 /** 2182 * 将 x 从 f1 进制数变成 f2 进制数。 2183 */ 2184 public static QueryColumn conv(QueryColumn columnX, QueryColumn columnF1, QueryColumn columnF2) { 2185 return new FunctionQueryColumn(CONV, columnX, columnF1, columnF2); 2186 } 2187 2188 /** 2189 * 将 x 从 f1 进制数变成 f2 进制数。 2190 */ 2191 public static <X, F1, F2> QueryColumn conv(LambdaGetter<X> columnX, LambdaGetter<F1> columnF1, LambdaGetter<F2> columnF2) { 2192 return new FunctionQueryColumn(CONV, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnF1), LambdaUtil.getQueryColumn(columnF2)); 2193 } 2194 2195 /** 2196 * 将 IP 地址转换为数字表示,IP 值需要加上引号。 2197 */ 2198 public static QueryColumn inetAton(String columnIP) { 2199 return new FunctionQueryColumn(INET_ATON, columnIP); 2200 } 2201 2202 /** 2203 * 将 IP 地址转换为数字表示,IP 值需要加上引号。 2204 */ 2205 public static QueryColumn inetAton(QueryColumn columnIP) { 2206 return new FunctionQueryColumn(INET_ATON, columnIP); 2207 } 2208 2209 /** 2210 * 将 IP 地址转换为数字表示,IP 值需要加上引号。 2211 */ 2212 public static <T> QueryColumn inetAton(LambdaGetter<T> columnIP) { 2213 return new FunctionQueryColumn(INET_ATON, LambdaUtil.getQueryColumn(columnIP)); 2214 } 2215 2216 /** 2217 * 可以将数字 n 转换成 IP 的形式。 2218 */ 2219 public static QueryColumn inetNtoa(String columnN) { 2220 return new FunctionQueryColumn(INET_NTOA, columnN); 2221 } 2222 2223 /** 2224 * 可以将数字 n 转换成 IP 的形式。 2225 */ 2226 public static QueryColumn inetNtoa(QueryColumn columnN) { 2227 return new FunctionQueryColumn(INET_NTOA, columnN); 2228 } 2229 2230 /** 2231 * 可以将数字 n 转换成 IP 的形式。 2232 */ 2233 public static <T> QueryColumn inetNtoa(LambdaGetter<T> columnN) { 2234 return new FunctionQueryColumn(INET_NTOA, LambdaUtil.getQueryColumn(columnN)); 2235 } 2236 2237 // === 聚合函数 === 2238 2239 /** 2240 * 返回指定列的最大值。 2241 */ 2242 public static FunctionQueryColumn max(String column) { 2243 return new FunctionQueryColumn(MAX, column); 2244 } 2245 2246 /** 2247 * 返回指定列的最大值。 2248 */ 2249 public static FunctionQueryColumn max(QueryColumn column) { 2250 return new FunctionQueryColumn(MAX, column); 2251 } 2252 2253 /** 2254 * 返回指定列的最大值。 2255 */ 2256 public static <T> FunctionQueryColumn max(LambdaGetter<T> column) { 2257 return new FunctionQueryColumn(MAX, LambdaUtil.getQueryColumn(column)); 2258 } 2259 2260 /** 2261 * 返回指定列的最小值。 2262 */ 2263 public static FunctionQueryColumn min(String column) { 2264 return new FunctionQueryColumn(MIN, column); 2265 } 2266 2267 /** 2268 * 返回指定列的最小值。 2269 */ 2270 public static FunctionQueryColumn min(QueryColumn column) { 2271 return new FunctionQueryColumn(MIN, column); 2272 } 2273 2274 /** 2275 * 返回指定列的最小值。 2276 */ 2277 public static <T> FunctionQueryColumn min(LambdaGetter<T> column) { 2278 return new FunctionQueryColumn(MIN, LambdaUtil.getQueryColumn(column)); 2279 } 2280 2281 /** 2282 * 返回指定列的平均值。 2283 */ 2284 public static FunctionQueryColumn avg(String column) { 2285 return new FunctionQueryColumn(AVG, column); 2286 } 2287 2288 /** 2289 * 返回指定列的平均值。 2290 */ 2291 public static FunctionQueryColumn avg(QueryColumn column) { 2292 return new FunctionQueryColumn(AVG, column); 2293 } 2294 2295 /** 2296 * 返回指定列的平均值。 2297 */ 2298 public static <T> FunctionQueryColumn avg(LambdaGetter<T> column) { 2299 return new FunctionQueryColumn(AVG, LambdaUtil.getQueryColumn(column)); 2300 } 2301 2302 /** 2303 * 返回指定字段值的和。 2304 */ 2305 public static FunctionQueryColumn sum(String column) { 2306 return new FunctionQueryColumn(SUM, column); 2307 } 2308 2309 /** 2310 * 返回指定字段值的和。 2311 */ 2312 public static FunctionQueryColumn sum(QueryColumn column) { 2313 return new FunctionQueryColumn(SUM, column); 2314 } 2315 2316 /** 2317 * 返回指定字段值的和。 2318 */ 2319 public static <T> FunctionQueryColumn sum(LambdaGetter<T> column) { 2320 return new FunctionQueryColumn(SUM, LambdaUtil.getQueryColumn(column)); 2321 } 2322 2323 // === COUNT === 2324 2325 /** 2326 * 返回指定列的总行数。 2327 */ 2328 public static FunctionQueryColumn count() { 2329 return new FunctionQueryColumn(COUNT, new StringQueryColumn("*")); 2330 } 2331 2332 /** 2333 * 返回指定列的总行数。 2334 */ 2335 public static FunctionQueryColumn count(String column) { 2336 return new FunctionQueryColumn(COUNT, column); 2337 } 2338 2339 /** 2340 * 返回指定列的总行数。 2341 */ 2342 public static FunctionQueryColumn count(QueryColumn column) { 2343 return new FunctionQueryColumn(COUNT, column); 2344 } 2345 2346 /** 2347 * 返回指定列的总行数。 2348 */ 2349 public static <T> FunctionQueryColumn count(LambdaGetter<T> column) { 2350 return new FunctionQueryColumn(COUNT, LambdaUtil.getQueryColumn(column)); 2351 } 2352 2353 2354 // === DISTINCT === 2355 2356 /** 2357 * 对指定列进行去重。 2358 */ 2359 public static DistinctQueryColumn distinct(QueryColumn... columns) { 2360 return new DistinctQueryColumn(columns); 2361 } 2362 2363 // === CASE THEN ELSE === 2364 2365 /** 2366 * 构建 case then when 语句。 2367 */ 2368 public static CaseQueryColumn.Builder case_() { 2369 return new CaseQueryColumn.Builder(); 2370 } 2371 2372 /** 2373 * 构建 case then when 语句。 2374 */ 2375 public static CaseSearchQueryColumn.Builder case_(QueryColumn column) { 2376 return new CaseSearchQueryColumn.Builder(column); 2377 } 2378 2379 // === CONVERT === 2380 2381 /** 2382 * 将所给类型类型转换为另一种类型。 2383 */ 2384 public static StringFunctionQueryColumn convert(String... params) { 2385 return new StringFunctionQueryColumn(CONVERT, params); 2386 } 2387 2388 // === 构建 column 列 === 2389 2390 /** 2391 * 构建 TRUE 常量。 2392 */ 2393 public static QueryColumn true_() { 2394 return new StringQueryColumn("TRUE"); 2395 } 2396 2397 /** 2398 * 构建 FALSE 常量。 2399 */ 2400 public static QueryColumn false_() { 2401 return new StringQueryColumn("FALSE"); 2402 } 2403 2404 /** 2405 * 构建 NULL 常量。 2406 */ 2407 public static QueryColumn null_() { 2408 return new StringQueryColumn("NULL"); 2409 } 2410 2411 /** 2412 * 构建数字常量。 2413 */ 2414 public static QueryColumn number(Number n) { 2415 return new StringQueryColumn(n.toString()); 2416 } 2417 2418 /** 2419 * 构建数字常量。 2420 */ 2421 public static QueryColumn string(String s) { 2422 return new StringQueryColumn("'" + s + "'"); 2423 } 2424 2425 /** 2426 * 构建自定义列。 2427 */ 2428 public static QueryColumn column(String column) { 2429 return new StringQueryColumn(column); 2430 } 2431 2432 /** 2433 * 构建自定义列。 2434 */ 2435 public static QueryColumn column(String table, String column) { 2436 return new QueryColumn(table, column); 2437 } 2438 2439 /** 2440 * 构建自定义列。 2441 */ 2442 public static QueryColumn column(String schema, String table, String column) { 2443 return new QueryColumn(schema, table, column); 2444 } 2445 2446 /** 2447 * 构建自定义列。 2448 */ 2449 public static <T> QueryColumn column(LambdaGetter<T> column) { 2450 return LambdaUtil.getQueryColumn(column); 2451 } 2452 2453 /** 2454 * 构建自定义列。 2455 */ 2456 public static QueryColumn column(QueryWrapper queryWrapper) { 2457 return new SelectQueryColumn(queryWrapper); 2458 } 2459 2460 // === IF 函数 === 2461 2462 /** 2463 * IF 函数。 2464 */ 2465 public static QueryColumn if_(QueryCondition condition, String trueColumn, String falseColumn) { 2466 return new IfFunctionQueryColumn(condition, new QueryColumn(trueColumn), new QueryColumn(falseColumn)); 2467 } 2468 2469 /** 2470 * IF 函数。 2471 */ 2472 public static QueryColumn if_(QueryCondition condition, QueryColumn trueColumn, QueryColumn falseColumn) { 2473 return new IfFunctionQueryColumn(condition, trueColumn, falseColumn); 2474 } 2475 2476 /** 2477 * IF 函数。 2478 */ 2479 public static <T, F> QueryColumn if_(QueryCondition condition, LambdaGetter<T> trueColumn, LambdaGetter<F> falseColumn) { 2480 return new IfFunctionQueryColumn(condition, LambdaUtil.getQueryColumn(trueColumn), LambdaUtil.getQueryColumn(falseColumn)); 2481 } 2482 2483 /** 2484 * IFNULL 函数。 2485 */ 2486 public static QueryColumn ifNull(String nullColumn, String elseColumn) { 2487 return new FunctionQueryColumn("IFNULL", new QueryColumn(nullColumn), new QueryColumn(elseColumn)); 2488 } 2489 2490 /** 2491 * IFNULL 函数。 2492 */ 2493 public static QueryColumn ifNull(QueryColumn nullColumn, QueryColumn elseColumn) { 2494 return new FunctionQueryColumn("IFNULL", nullColumn, elseColumn); 2495 } 2496 2497 /** 2498 * IFNULL 函数。 2499 */ 2500 public static <N, E> QueryColumn ifNull(LambdaGetter<N> nullColumn, LambdaGetter<E> elseColumn) { 2501 return new FunctionQueryColumn("IFNULL", LambdaUtil.getQueryColumn(nullColumn), LambdaUtil.getQueryColumn(elseColumn)); 2502 } 2503 2504 // === 构建 QueryCondition 查询条件 === 2505 2506 /** 2507 * EXIST (SELECT ...) 2508 */ 2509 public static QueryCondition exists(QueryWrapper queryWrapper) { 2510 return new OperatorSelectCondition("EXISTS ", queryWrapper); 2511 } 2512 2513 /** 2514 * NOT EXIST (SELECT ...) 2515 */ 2516 public static QueryCondition notExists(QueryWrapper queryWrapper) { 2517 return new OperatorSelectCondition("NOT EXISTS ", queryWrapper); 2518 } 2519 2520 /** 2521 * NOT (id = 1) 2522 */ 2523 public static QueryCondition not(QueryCondition childCondition) { 2524 return new OperatorQueryCondition("NOT ", childCondition); 2525 } 2526 2527 /** 2528 * 空条件。 2529 */ 2530 public static QueryCondition noCondition() { 2531 return QueryCondition.createEmpty(); 2532 } 2533 2534 // === 构建 QueryWrapper 查询 === 2535 2536 /** 2537 * SELECT queryColumns FROM table 2538 */ 2539 public static QueryWrapper select(QueryColumn... queryColumns) { 2540 return newWrapper().select(queryColumns); 2541 } 2542 2543 /** 2544 * SELECT * FROM table UNION SELECT ... 2545 */ 2546 public static QueryWrapper union(QueryWrapper queryWrapper) { 2547 return newWrapper().union(queryWrapper); 2548 } 2549 2550 /** 2551 * SELECT 1 FROM table 2552 */ 2553 public static QueryWrapper selectOne() { 2554 return select(column("1")); 2555 } 2556 2557 /** 2558 * SELECT COUNT(*) FROM table 2559 */ 2560 public static QueryWrapper selectCount() { 2561 return select(count()); 2562 } 2563 2564 /** 2565 * SELECT COUNT(1) FROM table 2566 */ 2567 public static QueryWrapper selectCountOne() { 2568 return select(count("1")); 2569 } 2570 2571 /** 2572 * SELECT * FROM table 2573 */ 2574 private static QueryWrapper newWrapper() { 2575 return new QueryWrapper(); 2576 } 2577 2578 // 构建原生 SQL 条件 2579 2580 /** 2581 * 构建原生查询条件。 2582 */ 2583 public static QueryCondition raw(String raw) { 2584 return new RawFragment(raw); 2585 } 2586 2587 /** 2588 * 构建原生查询条件,并附带参数。 2589 */ 2590 public static QueryCondition raw(String raw, Object... params) { 2591 return new RawFragment(raw, params); 2592 } 2593 2594}