我很惊讶这是不可能的。有替代方案吗?
SELECT st_point(37.5, 45.5)::string;
-- SQL compilation error: invalid type [CAST(ST_POINT(TO_DOUBLE(37.5), TO_DOUBLE(45.5)) AS VARCHAR(16777216))] for parameter 'TO_VARCHAR'
我想这样做的原因是我正在使用
st_collect
,它返回一个多点对象。我想将多点转换为线串,但显然 st_makeline
只允许 2 个点,而我有很多。
一个简单的修复方法是替换字符串,但似乎不允许。
ST_ASTEXT 或 ST_ASWKT 满足您的需求吗?
SELECT
st_point(37.5, 45.5) as x,
SYSTEM$TYPEOF(x),
ST_ASTEXT(x),
ST_ASWKT(x),
ST_ASEWKT(x);
X | 系统$类型(X) | ST_ASTEXT(X) | ST_ASWKT(X) | ST_ASEWKT(X) |
---|---|---|---|---|
{"坐标": [3.750000000000000e+01, 4.550000000000000e+01], "类型": "点"} | 变体[LOB] | 点(37.5 45.5) | 点(37.5 45.5) | SRID=4326;点(37.5 45.5) |
更长的答案是,当添加新数据类型时,它们通常是由 Snowflake 以 MVP 方式添加的,因此它们以它们需要/意图的核心方式工作,并且 100% 所有其他方式/类型都可能滞后或只是从来没有支持过。在某种程度上,这可能会令人沮丧,一种“做事并不适用于所有事情”的风格,但相反,如果您能看到如何按预期使用它们,那么还有更有用的东西。
上面我要求“typeof”的原因是“如果是 VARIANT 变体函数应该很高兴,但 GET 不高兴,并显示:
SELECT st_point(37.5, 45.5) as x, SYSTEM$TYPEOF(x), get(x, 'type');
001044 (42P13):SQL 编译错误:位置 52 处出现错误第 1 行
Invalid argument types for function 'GET': (GEOGRAPHY, VARCHAR(4))
所以它说它是一个变体,但知道它是一个 GROGRAPHY.. 让我们投射:
SELECT st_point(37.5, 45.5) as x, SYSTEM$TYPEOF(x), get(x::variant, 'type');
Invalid type [CAST(X AS VARIANT)] for parameter 'TO_VARIANT'
所以这里存在类型支持的缺口。如果这对您的业务使用至关重要,我会开具支持票,并且考虑到它很可能“不是错误”,只是支持方面的差距,它不会很快改变,因此在这两种情况下都是最有意义的,寻找另一种方法来实现你的目标。