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