Вы можете использовать fmt.Sscanf
, которая является строковой и текущей версией fmt.Scan
:
package main
import (
"fmt"
)
func main() {
str1 := "Connection to %s is down and error %d is thrown"
str2 := "Connection to DataBase is down and error 401 is thrown"
var s string
var d int
_, err := fmt.Sscanf(str2, str1, &s, &d)
if err != nil {
panic(err)
}
fmt.Println(s, d)
}
детская площадка: https://play.golang.org/p/5g5UcrHsunM [113 ]
Примечание. Похоже, вы анализируете ошибку. Если ошибка от Go, весьма вероятно, что она предоставляет данные внутри ошибки, поэтому вам не нужно анализировать их вручную. И если у вас есть контроль над ошибкой, лучше хранить данные внутри.
Oracle поддерживает несколько столбцов в операторе IN, поэтому вы можете написать:
SELECT a, b, c
FROM table1
WHERE (a,b,c) not in (
select a,b,c from table2
)
Другой вариант:
SELECT TEST, row_number() OVER (PARTITION BY TEST ORDER BY TEST) FROM TEST1
MINUS
SELECT TEST, row_number() OVER (PARTITION BY TEST ORDER BY TEST) FROM TEST2
Это будет МИНУС, если каждый дубликат будет обрабатываться как отдельная запись. Обратите внимание, что в приведенном ниже примере, если TEST1 имеет два значения 'C', а TEST2 только одно, вы получите одно на выходе.
dev> select * from test1;
T
-
A
A
B
C
C
dev> select * from test2;
T
-
B
C
dev> SELECT TEST, row_number() OVER (PARTITION BY TEST ORDER BY TEST) FROM TEST1
2 MINUS
3 SELECT TEST, row_number() OVER (PARTITION BY TEST ORDER BY TEST) FROM TEST2
4 /
T ROW_NUMBER()OVER(PARTITIONBYTESTORDERBYTEST)
- --------------------------------------------
A 1
A 2
C 2
SELECT field1 FROM table1 WHERE field1 NOT IN (SELECT field2 FROM table2)
Будет работать, пока field2 не может содержать NULL.
Часть того, что делает минус, - это удаление дубликатов. Рассмотрите возможность использования NOT IN, чтобы избежать удаления дубликатов.
SELECT TEST FROM TEST1 WHERE TEST NOT IN(SELECT TEST FROM TEST2)
модификатор ALL заставляет UNION возвращать все строки (например, UNION ALL ), может быть, это можно применить к МИНУСУ? Как и в
select field1 from table1
minus all
select field2 from table2
Все ответы «НЕ В» верны. Альтернативой, которая может быть проще для некоторых сценариев, является оператор «NOT EXISTS»:
SELECT TEST FROM TEST1
WHERE NOT EXISTS
(SELECT null FROM TEST2 WHERE TEST2.TEST = TEST1.TEST);
(Примечание: «null» в предложении select здесь бессмысленно)
Я лично использую оба метода, но мне нравится НЕ СУЩЕСТВУЕТ часто, потому что он более гибкий - например, для него не требуется, чтобы сравнение проводилось по условию равенства.
Последние версии оптимизатора часто преобразуют NOT IN в NOT EXISTS или наоборот; однако, если вы